Difference between revisions of "IFTTT"

From HSYCO
Jump to navigation Jump to search
(Created page with "This I/O Server allows you to implement a custom Telegram bot in HSYCO, for sending and receiving messages using the [http://telegram.org Telegram messaging service]. Categ...")
 
 
(19 intermediate revisions by the same user not shown)
Line 1: Line 1:
This I/O Server allows you to implement a custom Telegram bot in HSYCO, for sending and receiving messages using the [http://telegram.org Telegram messaging service].
+
This I/O Server implements two-way communication with the Webhooks service of [http://ifttt.com IFTTT], allowing HSYCO to trigger applets in IFTTT and, the other way around, to receive notifications and data from applets.
  
 
[[Category:I/O Server]]
 
[[Category:I/O Server]]
  
  
==Communication and Telegram bot setup==
+
==IFTTT setup==
  
The Telegram I/O Server connects to the Telegram service using the [http://core.telegram.org/bots Telegram Bot API] and requires a fully functional Internet connection.
+
The IFTTT I/O Server connects to IFTTT via its Webhooks service. It requires a fully functional Internet connection.
  
In order to use this I/O Server you need to create a bot first. Using your Telegram account, send the /newbot command to the Telegram BotFather bot. The BotFather will ask you for a name and username, then generate an authorization token for your new bot.
+
In order to setup an IFTTT applet that triggers an event and send data to HSYCO, connect the Webhook service to the "that" side of the applet.
  
The name of your bot will be displayed in contact details and elsewhere.
+
The URL you specify must have the same server address and port number you use to access the HSYCO Web interface, followed by the /ifttt path and the password defined in the IFTTT I/O Server configuration, for example: https://example.hsyco.net/ifttt/oieojdjeiw48394ejdejdd.
  
The Username is a short name, to be used in mentions and telegram.me links. Usernames are 5-32 characters long and are case insensitive, but may only include Latin characters, numbers, and underscores. Your bot's username must end in ‘bot’, e.g. ‘tetris_bot’ or ‘TetrisBot’.
+
Note that this password must be kept secret and should be long and difficult to guess, as it could otherwise be used to easily trigger events in HSYCO.
  
The token is a string along the lines of 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw that will be required to authorize the bot, setting the token parameter statically, in the I/O Server configuration, or dynamically, writing the token datapoint.
+
The "Method" field should be set to POST, the "Content Type" field is not required, and add a static or dynamic text, for example the "TextField" ingredient of a trigger, to the "Body" field.
 +
 
 +
The IFTTT I/O Server can also be used to send trigger events to IFTTT's applets. The I/O Server will send a web request that will be received by a Webhook trigger. This request contains a text value and can optionally have an event name. If the event name is not set using the appropriate IO command's syntax, the event name passed to Webhooks is "hsyco".
 +
 
 +
On the IFTTT [https://ifttt.com/maker_webhooks Webhooks page], click "Documentation" to retrieve the key and set the eventkey option of the I/O Server.
 +
 
 +
Define a new applet using the Webhook as the "this" trigger, enter the event name you want to use to identify this specific trigger, then add the "that" side of the trigger using the applet you need to trigger from HSYCO.
  
 
== HSYCO Configuration ==
 
== HSYCO Configuration ==
Add a Telegram I/O Server in the [[Settings#I/O Servers|I/O Servers section of the Settings]] and set its parameters.
+
Add a IFTTT I/O Server in the [[Settings#I/O Servers|I/O Servers section of the Settings]] and set the password.
  
{{note|Note that the Telegram I/O Server doesn't count in the I/O servers license total, so you don't need an extra I/O Server license to use Telegram with HSYCO.}}
+
{{note|Note that the IFTTT I/O Server doesn't count in the I/O servers license total, so you don't need an extra I/O Server license to use IFTTT with HSYCO.}}
  
  
 
=== High Availability ===
 
=== High Availability ===
*'''Shutdown when inactive''': defaults to true.
+
*'''Shutdown when inactive''': defaults to false.
  
Note that Telegram does not allow multiple connections to the same bot, so setting this option to false, thus leaving the Telegram I/O Server active on the slave server will generate connection errors on both the master and the slave servers. You may keep the slave Telegram I/O Server active using a different, dedicated bot, for it.
+
 
 +
=== Authentication ===
 +
*'''Password''': password string (only use upper and lower case A-Z characters or digits, no space or special characters allowed, no length restrictions). Used to accept web requests from the Webhooks service
 +
 
 +
{{note|Note that the password must be kept secret and should be long and difficult to guess, as it could otherwise be used to easily trigger events in HSYCO.}}
  
 
=== Options ===
 
=== Options ===
Line 36: Line 46:
 
|-
 
|-
  
|token
+
|eventkey
 
|
 
|
|token string
+
|the IFTTT API key obtained by viewing the Settings of the Webhooks applet. It is the last part of the URL (e.g., <nowiki>https://maker.ifttt.com/use/MYAPIKEY</nowiki>) found under My Applets > Webhooks > Settings.
|the bot's token string, generated by the BotFather
+
|used to generate trigger events in IFTTT
 
 
|-
 
 
 
|password
 
|
 
|registration string (spaces are allowed, no length restrictions)
 
|the user registration string (see Users Registration below)
 
  
 
|}
 
|}
 
A valid token is required to activate the Telegram I/O server, but you can set it dynamically, writing to the token datapoint. If you configure a Telegram I/O server without the token option, the I/O server will only activate once the token datapoint is set.
 
 
=== Users registration ===
 
 
If you don't set a password, all users will be able to send messages to your Telegram bot, and it will be up to your application logic in HSYCO to filter out unwanted messages.
 
 
As in most cases you may need to accept messages only from specific users, the Telegram I/O Server implements a simple user registration procedure.
 
 
If you set an arbitrary length phrase (spaces between characters are allowed) in the password configuration parameter or writing to the password datapoint, when a Telegram message is received from a user that exactly matches the registration phrase, that user is added to the registered users list. Note that the match is case-sensitive, and only leading/trailing spaces are ignored.
 
 
So, if you set a password, only messages originating from registered users are accepted and forwarded to HSYCO applications via I/O events.
 
 
The list of registered users is stored in text files in HSYCO's root directory, named <nowiki>telegram-<I/O Server name>.ini</nowiki>
 
  
 
== Datapoints ==
 
== Datapoints ==
Line 74: Line 63:
 
|-
 
|-
  
|rowspan="2" |connection
+
|request
|online
+
|<body&nbsp;text>
 
|R
 
|R
|connection established
+
|the text sent by the IFTTT Webhooks service web request. This is a forced event, triggered on every request
|-
 
|offline
 
|R
 
|HSYCO can't connect to the Telegram servers, or the bot token is not valid
 
  
 
|-
 
|-
  
|bot
+
|request.<query>
|<bot&nbsp;name>
+
|<body&nbsp;text>
 
|R
 
|R
|the name of the bot associated to the token. This datapoint is set only when the connection to the Telegram's servers is established, and the token is valid. You don't need to set the bot name to establish the connection, only the token string is required
+
|the text sent by the IFTTT Webhooks service web request. Query is the optional query string in the URL as set in the Webhooks service. This is a forced event, triggered on every request
 
 
|-
 
 
 
|password
 
|<registration&nbsp;phrase>
 
|W
 
|see [[Telegram#Users_registration|Users registration]]. Note that writing the password datapoint overrides the password set as configuration parameter
 
 
 
|-
 
 
 
|token
 
|<token&nbsp;string>
 
|W
 
|see [[Telegram#Communication_and_Telegram_bot_setup|Communication and Telegram bot setup]]. Note that writing the token datapoint overrides the token set as configuration parameter
 
  
 
|-
 
|-
  
|enable
+
|event
|<user id>
+
|<value1>
 
|W
 
|W
|when users registration is active, you can re-enable a user that was previously disabled
+
|trigger an IFTTT Webhooks event with event name "hsyco", passing the value as value1
  
 
|-
 
|-
  
|disable
+
|event.<name>
|<user id>
+
|<value1>
 
|W
 
|W
|when users registration is active, you can disable a registered user, so that messages originating from that user will be ignored
+
|trigger an IFTTT Webhooks event with the specified event name, passing the value as value1
 
 
|-
 
 
 
|message.<user&nbsp;id>
 
|<message&nbsp;text>
 
|R
 
|the message text received from a user with id <user&nbsp;id>. This is a forced event, triggered on every message
 
 
 
|-
 
 
 
|message.json
 
|<JSON&nbsp;string>
 
|R
 
|received message, with all attributes, in JSON format. This is a forced event, triggered on every message
 
 
 
|-
 
 
 
|message.<user&nbsp;id>
 
|<text>
 
|W
 
|send a text message to user <user&nbsp;id>
 
 
 
|-
 
 
 
|message.<user&nbsp;id>.<message&nbsp;id>
 
|<text>
 
|W
 
|send a text message to user <user&nbsp;id>, as a reply to message <message&nbsp;id>
 
 
 
|-
 
 
 
|message.all
 
|<text>
 
|W
 
|when users registration is active, send a text message to all registered users that are currently enabled
 
 
 
|-
 
 
 
|message.html.<user&nbsp;id>
 
|<text>
 
|W
 
|send an [http://core.telegram.org/bots/api#html-style HTML] message to user <user&nbsp;id>
 
 
 
|-
 
 
 
|message.html.<user&nbsp;id>.<message&nbsp;id>
 
|<text>
 
|W
 
|send an [http://core.telegram.org/bots/api#html-style HTML] message to user <user&nbsp;id>, as a reply to message <message&nbsp;id>
 
 
 
|-
 
 
 
|message.html.all
 
|<text>
 
|W
 
|when users registration is active, send an [http://core.telegram.org/bots/api#html-style HTML] message to all registered users that are currently enabled
 
  
 
|}
 
|}
 
=== Keyboards ===
 
 
You can send messages with a custom keyboard with predefined reply options. Simply use the following format at the end of the message:
 
[[r1c1,r1c2...],[r2c1,r2c2...]...]
 
r1c1 is the text label of the first button of the first row, r1c2 is the second button of the first row, r2c1 is the first button of the second row, etc. You can create keyboards withan arbitrary number of rows and columns, as far as the format makes sense for Telegram. This keyboard format is interpreted as a keyboard only if it is at the very end of the message, otherwise it will be sent unmodified in the text.
 
 
See [https://core.telegram.org/bots#keyboards Keyboards] for additional information.
 
  
 
== Examples ==
 
== Examples ==
=== Sending messages ===
+
=== Receiving a web request from IFTTT ===
Assuming that we are sending an SMS at 12 o' clock  to user id 777123456, this is the EVENTS programming declaration:
+
Assuming that the IFTTT's I/O Server id is "ifttt", these events will write the incoming request to the log file:
 
 
time = 1200 : io telegram.message.777123456 = "I'm sending this message to you, my dear"
 
 
 
When users registration is active, you can send a message to all registered users that are currently enabled, also using a few HTML tags (as supported by the Telegram Bot API):
 
 
 
time = 1200 : io telegram.message.html.all  = "I'm sending this message to you, <nowiki><b>my dear</b></nowiki>"
 
 
 
Send a message with a custom keyboard:
 
  
  time = 1200 : io telegram.message.777123456 = "Do you like my message? <nowiki>[[Yes,No]]</nowiki>"
+
  io ifttt.request : log = io ifttt.request
 +
io ifttt.request.myquery : log = io ifttt.request
  
=== Receiving messages ===
+
=== Generating a trigger event in IFTTT ===
Hsyco can receive Telegram messages and perform actions according to the text contained in the message.
+
This EVENTS line will trigger a Webhooks event named "hsyco" every minute, passing the time as the value1 field of the Webhooks trigger:
  
  io telegram.message.777123456 = "Yes" : io telegram.message.777123456 = "Thank you!"
+
  time : io ifttt.event = $time$
io telegram.message.777123456 = "No" : io telegram.message.777123456 = "Why not? You are so mean!"
 
  
 
== Release Notes ==
 
== Release Notes ==
=== 3.6.0 ===
+
=== 3.7.0 ===
 
*initial release
 
*initial release
  

Latest revision as of 10:11, 9 December 2021

This I/O Server implements two-way communication with the Webhooks service of IFTTT, allowing HSYCO to trigger applets in IFTTT and, the other way around, to receive notifications and data from applets.


IFTTT setup

The IFTTT I/O Server connects to IFTTT via its Webhooks service. It requires a fully functional Internet connection.

In order to setup an IFTTT applet that triggers an event and send data to HSYCO, connect the Webhook service to the "that" side of the applet.

The URL you specify must have the same server address and port number you use to access the HSYCO Web interface, followed by the /ifttt path and the password defined in the IFTTT I/O Server configuration, for example: https://example.hsyco.net/ifttt/oieojdjeiw48394ejdejdd.

Note that this password must be kept secret and should be long and difficult to guess, as it could otherwise be used to easily trigger events in HSYCO.

The "Method" field should be set to POST, the "Content Type" field is not required, and add a static or dynamic text, for example the "TextField" ingredient of a trigger, to the "Body" field.

The IFTTT I/O Server can also be used to send trigger events to IFTTT's applets. The I/O Server will send a web request that will be received by a Webhook trigger. This request contains a text value and can optionally have an event name. If the event name is not set using the appropriate IO command's syntax, the event name passed to Webhooks is "hsyco".

On the IFTTT Webhooks page, click "Documentation" to retrieve the key and set the eventkey option of the I/O Server.

Define a new applet using the Webhook as the "this" trigger, enter the event name you want to use to identify this specific trigger, then add the "that" side of the trigger using the applet you need to trigger from HSYCO.

HSYCO Configuration

Add a IFTTT I/O Server in the I/O Servers section of the Settings and set the password.

Note that the IFTTT I/O Server doesn't count in the I/O servers license total, so you don't need an extra I/O Server license to use IFTTT with HSYCO.


High Availability

  • Shutdown when inactive: defaults to false.


Authentication

  • Password: password string (only use upper and lower case A-Z characters or digits, no space or special characters allowed, no length restrictions). Used to accept web requests from the Webhooks service
Note that the password must be kept secret and should be long and difficult to guess, as it could otherwise be used to easily trigger events in HSYCO.


Options

ID Default Values Description
eventkey the IFTTT API key obtained by viewing the Settings of the Webhooks applet. It is the last part of the URL (e.g., https://maker.ifttt.com/use/MYAPIKEY) found under My Applets > Webhooks > Settings. used to generate trigger events in IFTTT

Datapoints

ID Value R/W Description
request <body text> R the text sent by the IFTTT Webhooks service web request. This is a forced event, triggered on every request
request.<query> <body text> R the text sent by the IFTTT Webhooks service web request. Query is the optional query string in the URL as set in the Webhooks service. This is a forced event, triggered on every request
event <value1> W trigger an IFTTT Webhooks event with event name "hsyco", passing the value as value1
event.<name> <value1> W trigger an IFTTT Webhooks event with the specified event name, passing the value as value1

Examples

Receiving a web request from IFTTT

Assuming that the IFTTT's I/O Server id is "ifttt", these events will write the incoming request to the log file:

io ifttt.request : log = io ifttt.request
io ifttt.request.myquery : log = io ifttt.request

Generating a trigger event in IFTTT

This EVENTS line will trigger a Webhooks event named "hsyco" every minute, passing the time as the value1 field of the Webhooks trigger:

time : io ifttt.event = $time$

Release Notes

3.7.0

  • initial release


IFTTT is a registered trademark of IFTTT Inc.