Rails sms, email and voice messaging framework - ruby-on-rails

Is there a framework built in rails that lets me do something like send a message and then based off of user preferences automatically determine whether a text message, voice message or email message should be sent (or any combination of the 3 options)?
Also, if there is a framework like this, does it have support for receiving text messages or email messages and taking actions?
I know this is a big ask. The reason I am asking is because I have started implementing a system like this and am considering making it open source but I am curious if there is anything out there like this already that I should learn from first before publishing my system.

A full blown framework? No.
A helper library that does 95.2% of what you're looking for? Yes.
Using the Twilio gem - https://github.com/twilio/twilio-ruby - you can send SMS or Voice with a handful of lines of code. You don't need to know their mobile carrier either, you can just send the SMS/Call for pennies per message/minute.
If you need a hand with it, I'm happy to help. You can reach me at keith # twilio.com.

Related

Twilio: Is there a way to export all opt outs?

I want to export everyone who has reply stop (opt out) for my messages. I see that my options are
API. However, through the API I can see that I get everything in pages of 50 messages, so I have to go and do a lot of code to go page by page, message by message just to check if the content is stop. Seems a bit unnecessary for a 1 time job.
From the console in my account, however when each time i try to filter on status received I get the following error, and when I dont filter I get error:
Your export request has more than 10,000 records, please filter your results and try again.
Surely there must be an easy way that I can get all the list of numbers that had opt out?
This answer above is not strictly true as of October 2020. Twilio now has an "insights" dashboard that allows you to view and download "Opt outs Received". When you click on that dashboard you are able to see and download the information.
It is under: Programmable Messaging -> Monitor -> Insights
Our account has "Opt-Out Management" enabled and this addition has been a game changer in finding out what users have or have not done in our system.
There isn't a way to export all opt-outs for LC's/TF's that Twilio maintains on your behalf but opt-outs are forwarded to your application for logging as well as added to the Twilio maintained opt-out list. Your application can keep track of the opt-outs this way. You can find more details in the Help Center article below.
Twilio support for opt-out keywords (SMS STOP filtering)
"When Twilio receives one of these replies, we will create a "blacklist" entry on our side, and then pass the message on to your webhook. Once we have a blacklist entry for a particular recipient phone number, any future attempts to message them will be met with a 400 response from our API, along with Error Code 21610 - Message cannot be sent to the 'To' number because the customer has replied with STOP. Recipients can disable this message stop, and resume receiving messages with the START, YES, or UNSTOP commands as outlined below."
Also, if you use the Twilio helper library for the respective language, it handles the paging for you, for example, for Node.js, reference.
Usage and Migration Guide for Twilio's Node.js Helper Library 3.x
"One of the biggest advantages of twilio-node 3.x is that it automatically handles paging for you! In both list and each, you can specify the maximum number of instances to grab (limit), and the page size (pageSize). The library will take care of everything else."

Add warning message to mails using MS Graph API

How can I update mail to show a "warning" message that exists on a users' mailbox as like what you see when mail is moved to the "junk mail" folder using the Graph API? See attached screenshot. Obviously, I want this message to be customised with my own text. It's not possible to update messages if they aren't draft (isDraft=false).
I dont think that Transport rules are good for us because I want to add that label after the message has arrived into the users' mailbox.
I know that its possible to add Custom Attributes to a message resource - https://learn.microsoft.com/en-us/graph/api/resources/opentypeextension?view=graph-rest-1.0
Can I utilize it? any way that you can recommend to do such a thing?
Do I need to develop any addon for that?
After speaking to the PM , there is no supported scenario to do this. If you require this feature you can make a request on https://microsoftgraph.uservoice.com/

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.

Is there a way to check open/click rates, bounces of emails via Rails?

I'm currently trying to send emails from a Rails application and would like to check the open/click rates of these emails. (without using any web service) Is there a gem or plugin that I can use to help me find out? Or is it even possible to do this?
Take a look here:
http://www.codingforums.com/archive/index.php/t-122920.html
I think the first mentioned method, detecting how many times an image has been viewed would be the easiest. Then again, these are not exact solutions, but I think an exact solution would be sort of a security hole (i.e. sending an HTTP request to a foreign server once you open an email).
Varatis is correct, using image tracking is the most common way this is done, and it is the way that most web services provide you with analytics on the e-mails they send on your behalf. Here is another Stack Overflow question that includes an example of how you might do this in Rails.

Sending newsletters in Rails 3

Is it suitable to use Mail Gun to send out newsletters (bulk emails)? We are currently using Mail Gun to send out transactional emails (i.e. for confirmation emails) Works great!
We are looking at Campaign Monitor and Mail Chimp for weekly email newsletters. Are these services more suitable for this kind of task?
One thing I find more convenient with Mail Gun, is their API is much easier to work with. Especially when sending "dynamic" / more personalized emails. For example:
Hello Foo,
Your total video plays is 1,291. You have 214 total comments.
Regards,
Awesome Web
On the other hand, the UI analytics / reporting provided by Campaign Monitor and Mail Chimp make it much easier to read, especially for someone non technical. The same applies for creating campaigns and templates.
And it is simple enough to use with Rails. Since the templates are created via ActionMailer instead of from the UI (as seen with Campaign Monitor and Mail Chimp).
Are there any deliver-ability advantages for newsletters, from using one of the services, that I should be aware of?
Disclaimer: Since I love their service I ended up knowing them personally
If you want to use only one service to send and track all your emails, you need an all in one solution. They are not many players on this segment and I guess that the Cloud Emailing platform Mailjet would be the best for you :
They let you send both marketing and transactional email.
They have great analytics: really actionable and easy to use.
They must cost about the same price as Mail Gun, or maybe even less (30,000 emails cost something like $7 for example).
Last but not least, they optimize your deliverability (authentications, IP reputation, etc.).
On top of all this, Mailjet's API is well documented and makes you able to personalize the messages. And they even have an official Ruby Gem.
If you want a clear and objective overview of what exists, you can easily compare the different actors here.

Resources