Interacting with Outlook appointments using rails - ruby-on-rails

I have a rails application running on a Linux server. I would like to interact with Outlook/Exchange 2003 appointments from the rails application. For example, certain actions should trigger sending an appointment, and then preferably accepting/canceling the appointment in Outlook should trigger events in the application.
Failing this, is it possible to publish calendars that Outlook 2003 can read without requiring Outlook plugins? I note that Outlook 2003 does not support ical without plugins for example. Similarly, if this is not easily doable in Ruby, but is in another language (such as Perl for example) running on Linux then those suggestions would be welcome.
Any advice on how to achieve this, or where to start looking for answers would be gratefully received.

Outlook appointments are just e-mails with special header information. There's some information in this tutorial on the required parts. I sent a few meeting invites from my Outlook to my Gmail account and took a look at the raw headers there - you can figure most of the protocol out from that.
The iCalendar specs may help you, as well.

Thanks for everyones help. I found something that showed me how to do this with Perl, and ported it over to ruby. I've blogged about it for those looking for a solution

If you can upgrade to Exchange 2007, you can use Exchange Web Services that is more powerful and convenient to use than WebDAV.
At work, I inherited a Rails app that allow users to create single appointments. I was asked to write code to link those appointments in the app to users' outlook calendars, so that they are always in sync. Sounds to me very similar to what you want to do.
I don't think I'm allowed to publish the exact code I wrote though. Anyway I'll give you a bit idea on how I addressed it.
Exchange Web Services only provide API in C# (no surprise, it's Microsoft. Technically, you can use other languages since it's actually SOAP.). I wrote a middleware in C# that does the sync between Exchange server and the Rails app. When users do scheduling in the app, changes are sent to the middleware so changes can be reflected to their outlook calendars. Meanwhile, the middleware registers Push Notification subscriptions for all users -- every time changes are made in Outlook, the middleware will be immediately notified, which in turn faithfully reflect those changes in the app as well. Of course, recurring appointments are also supported.
Hope that helps you.

Take a look at the project RExchange on github.

For accessing appointments, you can just access the Calendar folder on Exchange using WebDav. For creating appointments, please refer to RFC2445 for details.

Further to ceejayoz's comment, you can also use ActionMailer to catch the replies that are sent back, and act on them - you'll need some form of unique id in a place that will be included in the reply though.

Related

How to use Priority API?

I'm trying to create a simple application that reminds me of two weeks before I was supposed to get a delivery. My data is store in a Priority database and I'm looking for a way to read it using code (prefer in Python).
I read about Priority REST API and tested it with the examples that are in the site(https://prioritysoftware.github.io/restapi/request/). it seems like this is the way to do it but I see that it requires a URL to the Priority account and I don't know what is my URL because I use the desktop app.
So I have 2 questions:
Is using the API is the best way?
how do I find the URL to my account?
In addition I would be happy for further help regarding my idea for a program reminiscent of two weeks before receiving a delivery (examples, tips, ways to implement and so on).
Thank in advance
In order to use Priority API you need to install its application server.
More information can be found here.
If you are working locally you can access carefully directly to your SQL server and look for your data.
Priority has built-in functionality to send email reminders (BPM rules)

Inviting event attendees programatically on iOS 10

I've been using Stackoverflow for about 5 years now, and haven't felt the need to ask a single question yet, I've always found the answer i needed through previous threads. That just changed and I have a question that I really can't figure out. And it sounds so easy to do.
So the question is; how do you invite attendees, or reply/decline to calendar events on iOS under iOS 10? And please, no we don't want to bring up an EKEventViewController. We'd like to do this in our own UI. Under iOS 9 this was possible through just forcing EKAttendees objects in to the EKParticipants array with setValueForKey:. But under iOS 10 this produces an error saying 'Attendees can't be modified'.
I have used a Technical Support credit with Apple and got the reply that this was not possible. It is not possible using their APIs.
The closest to an answer i've got is to use IMIP (https://www.rfc-editor.org/rfc/rfc6047#section-2.2.1). If that's the way to go, could someone help me along on how to actually set that up? I'm not well versed in back-end development, I'm all front-end so I wouldn't really know where to start.
There also seems to be some CalDav servers on GitHub (https://github.com/mozilla-b2g/caldav) but I'm not sure how good they are, or exactly what you need to set one up.
So basically, is there anyone who could give a childs explanation to just how the heck we can send nice invites to calendar events. And if there are different solutions for Google, Apple accounts (obviously under the hood, but implementation-wise) that would be very helpful to know to.
Is this something that requires a ton of implementation on our own servers or is there some reliable service to use? That would be ideal. Maybe you should build one and you got at least one customer here :-)
Appreciate any help!
You cannot modify attendees using EventKit, but Apple already told you that:
I have used a Technical Support credit with Apple and got the reply that this was not possible. It is not possible using their APIs.
The hack with accessing the internal objects using KVC was, well, a hack and not documented API. No surprise they killed that.
So how do calendar invites work. That in itself is a very complex topic (consider delegation, resource booking like rooms, etc etc). There is a whole consortium which works on that (CalConnect), they also have a broad overview: Introduction to Internet Calendaring and Scheduling.
If you are serious into scheduling/calendaring software, it may make a lot of sense to join CalConnect for their interop events etc.
But you wanted a 'childs explanation'. I can't give that, but a short overview.
iTIP
iTIP is a standard which defines how scheduling messages flow, e.g. that you send a message to your attendee, your attendee responds back with accept/decline, what happens if a meeting is cancelled and all that.
It does NOT however specify how those messages are transferred. It is just a model on how the message flow works between the organiser and the participants.
Most 'big' calendaring systems (Exchange, Google, CalDAV servers like iCloud) use iTIP or at least something very similar.
iMIP
iMIP is a standard which defines on how to exchange iTIP messages using email. Say if you invite someone using iMIP, you'll send him a special email message with the iCalendar payload containing the invite. If your attendee accepts, his client will send back another iCalendar payload via email containing that.
iMIP is supported by a lot of systems and was, for a long time, pretty much the only way to exchange invitations between different systems (say Outlook and Lotus Notes).
However: the iOS email client does NOT support iMIP (unlike macOS or Outlook). So if someone sends you an iMIP invite to your iOS device, you won't be able to respond to that. (reality is more complex, but basically it is like that)
CalDAV
CalDAV is a set of standards around calendars stored on a server. Many many servers support CalDAV. E.g. iCloud uses CalDAV. Yahoo, Google, etc all support CalDAV. The important exception is Exchange, which doesn't support it.
In its basic setup CalDAV just acts as a store. You can use HTTP to store (PUT) and retrieve (GET, etc) events and todos using the iCalendar format.
In addition many CalDAV servers (e.g. iCloud) do 'server side scheduling'. That is, if you store an event to the server which is a meeting (has attendee properties), the server will fan out the invitations. Either internally if the attendees live on the same server, or again using iMIP.
Exchange
Exchange supports iMIP but not CalDAV. You usually access it using one of its own web service APIs, e.g. ActiveSync or Exchange Web Services. I'm no expert on them, but I'm sure that they allow you to create invites. Exchange&Outlook have an iTIP like invite flow.
etc
Is this something that requires a ton of implementation on our own servers or is there some reliable service to use?
This really depends on your requirements and needs. Do you need to process replies or just send out generic events?
If you want to host a calendar store, it probably makes sense to use an existing CalDAV server.
Calendar invitations are a very complex topic and you need to be very specific on your actual requirements to find a solution. In general interoperable invitations in 2017 are still, lets say 'difficult'.
P.S.: Since you've been using StackOverflow for about 5 years now, you should know that this question is too broad for this thing.

How to display live tweets in twitter-vibe using datasift in Ruby on Rails

I am trying to configure an existing Ruby on Rails application (https://github.com/richcaudle/twitter-vibe) with datasift. Application displays live tweets of a user on the page. The datasift authentication parameters are set in config/social-config.yml. I have provided the correct authentication parameters in config/social-config.yml but yet the tweets do not show up. Only the html layout is displayed. Entire application is available in the same github link. I needed some help in fixing this application. What am i missing?
I created this app a while ago, before I joined DataSift. It's not something I've had time to maintain. I've added some instructions to the Readme file which I hope will help, I've also updated the app to use the latest DataSift library.
You'll need to have a Twitter, DataSift and Pusher account to get it running. Fortunately all are free or give you a free trial!
Probably all you were missing is that you need to start the data-collector & tasks scripts in /script to get it all running. I've added these to the Readme.
If you are going to use this in production or in public, please adapt the demo to meet Twitter's Terms of Service (for instance the display requirements). I created the app as an internal demo.
https://dev.twitter.com/terms/api-terms
Thanks,
Rich
Well, you can always use the datasift ruby library. The repository that you mentioned; probably you might need a pusher account. You can use the datasift library.

"Unsubscribe" for email categories/types through Sendgrid, Mailchimp, SES

I've got a Rails 3.2 app that will need to send various transactional & bulk (marketing) types of emails. Ideally I'd be able to use a service (like Sendgrid or Amazon SES) to improve deliverability and for unsubscribe support. I've mostly used Sendgrid in the past, but I need the 'unsubscribe' to be just for a specific category of the email (there are around 6 categories). I can't have someone unsubscribing from a marketing email and miss out on notification or invitation emails. Does anyone know of an service that supports this, or does this just have to be done internally? It seems like there's a lot to deal with related to best practices for deliverability, list-unsubscribe, etc. if you manage it yourself.
I see this discussion on sendgrid, but seems to be pending still:
http://community.sendgrid.com/sendgrid/topics/unsubscribe_and_categories
I'm happy to go with any service if it integrates relatively easily with Rails and can support category/type based subscription management. Or perhaps a hybrid approach with different services or separate accounts on the same service, if they allow that for the same domain?
I very much appreciate any feedback on how others have tackled this.
Thanks!
SendGrid is currently developing this feature and we hope to have it out shortly. There isn't an exact time for the release of this feature yet but it sounds like it is just what you are looking for. Check out SendGrid's blog, it will be updated when this feature is available for beta testing.
http://www.sendgrid.com/blog
Thanks
Brian
It looks like CritSend(1) have what they call "tag" support and state the following on their site:
Our unsub processing is done per tag, so if someone unsubscribes from
one of your emails tagged "newsletter1" that does not unsubscribe them
from any other tag.
The one thing that is unclear is the level of Ruby support.
CritSend name MxmConnect as the gem to use for sending emails. There is a critsend_events gem for the CritSend Events API.
(1) Note, I have no affiliation with CritSend

Receive notification when site server adds page

I've been doing some programming off and on for my brother, who is a stock trader. I'm wondering if it is possible to receive a push notification when a site server adds a page. For example, the site smallcapfortunes.com frequently adds pages that are simple extensions off the main URL. For example, the site regularly adds pages under URLs such as /neca/, /stev/, etc.
Are there existing methods to execute this? Or is this something I need to write myself? Has anyone here written anything like that?
I know there are existing sites to track basic updates to a single page. In my research, though, I haven't found anything like this.
Please let me know if there are any other details I need to provide.
Generally you can only get a push notification if a specific website offers that service.
Some websites publish a structured (XML) site map. If the one you're interested in does that, you could pull that sitemap on a regular basis and look for differences.
you're most likely going to want to use http://scrapy.org/ to go through the site and find new /neca/ and /stev/ urls, etc, then just trigger the script every so often.

Resources