home-assistant.io/source/_components/notify.facebook.markdown
Dmitry Avramenko 649b3c8755 Enable broadcast of Facebook bot messages (#4688)
* enable broadcast of FB bot messages

this should go together with PR https://github.com/home-assistant/home-assistant/pull/12459 
it enables FB messenger broadcast ability to send messages to all people who interacted with the bot previously and have the chat open.

* fixes as per request from reviewer.

fixes as per request from reviewer. 
FB -> Facebook
fixed indents.  (not sure what 2x for each level was), but I fixed it as per sample above.

* Update notify.facebook.markdown

* ✏️ Tiny fixes

* Update notify.facebook.markdown

* Update notify.facebook.markdown

* 🚀 Trigger rebuild
2018-04-17 19:21:57 +02:00

5.6 KiB

layout, title, description, date, sidebar, comments, sharing, footer, logo, ha_category, ha_release
layout title description date sidebar comments sharing footer logo ha_category ha_release
page Facebook Messenger Instructions on how to add Facebook user notifications to Home Assistant. 2016-12-31 14:14 true false true true facebook.png Notifications 0.36

The facebook notification platform enables sending notifications via Facebook Messenger, powered by Facebook.

To use this notification platform in your installation, add the following to your configuration.yaml file:

# Example configuration.yaml entry
notify:
  - name: NOTIFIER_NAME
    platform: facebook
    page_access_token: FACEBOOK_PAGE_ACCESS_TOKEN

Configuration variables:

  • page_access_token (Required): Access token for your Facebook page. Checkout Facebook Messenger Platform for more information.
  • name (Optional): Setting the optional parameter name allows multiple notifiers to be created. The default value is notify. The notifier will bind to the service notify.NOTIFIER_NAME.

{% linkable_title Usage %}

With Facebook notify service, you can send your notifications to your Facebook messenger with help of your Facebook page. You have to create a Facebook Page and App for this service. You can control it by calling the notify service as described here. It will send a message on messenger to user specified by target on behalf of your page. See the quick start guide for more information. The phone number used in target should be registered with Facebook messenger. Phone number of the recipient should be in +1(212)555-2368 format. If your app is not approved by Facebook then the recipient should by either admin, developer or tester for your Facebook app. More information about the phone number.

# Example automation notification entry
automation:
  - alias: Evening Greeting
    trigger:
      platform: sun
      event: sunset
    action:
      service: notify.facebook
      data:
        message: 'Good Evening'
        target:
          - '+919413017584'
          - '+919784516314'

You can also send messages to users that do not have stored their phone number on Facebook, but this requires a bit more work. The Messenger platform uses page-specific user IDs instead of a global user ID. You will need to enable a webhook for the "messages" event in Facebook's developer console. Once a user writes a message to a page, that webhook will then receive the user's page specific ID as part of the webhook's payload. Below is a simple PHP script that reacts to the message "get my id" and sends a reply containing the user's ID:

<?php

$access_token = "";
$verify_token = "";

if (isset($_REQUEST['hub_challenge'])) {
    $challenge        = $_REQUEST['hub_challenge'];
    $hub_verify_token = $_REQUEST['hub_verify_token'];

    if ($hub_verify_token === $verify_token) {
        echo $challenge;
    }
}

$input   = json_decode(file_get_contents('php://input'), true);
$sender  = $input['entry'][0]['messaging'][0]['sender']['id'];
$message = $input['entry'][0]['messaging'][0]['message']['text'];

if (preg_match('/get my id/', strtolower($message))) {
    $url      = 'https://graph.facebook.com/v2.10/me/messages?access_token=' . $access_token;
    $ch       = curl_init($url);
    $jsonData = '{
        "recipient":{
            "id":"' . $sender . '"
        },
        "message":{
            "text":"Your ID: ' . $sender . '"
        }
      }';

    $jsonDataEncoded = $jsonData;
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);

    if (!empty($input['entry'][0]['messaging'][0]['message'])) {
        $result = curl_exec($ch);
    }
}

{% linkable_title Rich messages %}

You could also send rich messing (cards, buttons, images, videos, etc). Info to which types of messages and how to build them.

# Example script with a notification entry with a rich message

script:
  test_fb_notification:
    sequence:
      - service: notify.facebook
        data:
          message: Some text before the quick replies
          target: 0034643123212
          data:
            quick_replies:
              - content_type: text
                title: Red
                payload: DEVELOPER_DEFINED_PAYLOAD_FOR_PICKING_RED
              - content_type: text
                title: Blue
                payload: DEVELOPER_DEFINED_PAYLOAD_FOR_PICKING_BLUE

You can now also use Facebook public beta broadcast API to push messages to ALL users who interacted with your chatbot on your page, without having to collect their number. This will scale to thousands of users. Facebook requires that this only be used for non-commercial purposes and they validate every message you send. Also note, your Facebook bot needs to be authorized for "page_subscritions" if you want to make it to all but can be used right away to a selected group of testers of your choice.

To enable broadcast just use the keyword "BROADCAST" as your target. Only put ONE target BROADCAST as below:

- alias: Facebook Broadcast
  trigger:
    platform: sun
    event: sunset
  action:
    service: notify.facebook
    data:
      message: Some text you want to send
      target:
        - BROADCAST