https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-send-a-facebook-messenger-message-with-node-js/Blog_Facebook-Messenger_Node-js_1200x600.png

Node.jsでFacebook Messengerメッセージを送信する方法

最終更新日 November 19, 2020

所要時間:1 分

Facebookメッセンジャーを使えば、Facebook上であなたの組織とつながっている人たちは、便利な自動サービスにアクセスできます。注文を受けたり、最新情報を提供したり、質問に答えたりすることができます。この方法でのコミュニケーションに慣れていない場合や、これまでウェブプレゼンスをFacebookだけに頼っていた場合は、まずVonageの メッセージAPIサンドボックス.

前提条件

この例では、Messengerからのメッセージに対して、ランチのおすすめを返信するクイックサービスを設定します。Messengerは少し変わっていて、あなたがメッセージを送る前に、顧客があなたとの会話を始めなければなりません。したがって、メッセージを送るだけではテストできない。そのためには、サンドボックスを使うための一般的な前提条件に加え、Nodeサーバーが必要です:

メッセージを受信するには、サーバーを公開する必要があります。これは開発マシン上で ngrokを使うか、Glitchを使うことができる。 サンプルコード.

サーバーの作成

作業ディレクトリに server.jsファイルを作成する。あなたのサーバーは、ほとんどの最小限のExpressサーバーと同じように見えるだろう。パッケージをrequireしてインスタンスを取得し、さらに body-parseraxios.それからミドルウェアを設定し、最後にポート3000をリッスンする。

ここでのサーバーの目的は、ウェブフック用のエンドポイントを提供することです。受信メッセージ用とステータス用を追加することができます。今のところ、リクエストが宛先に到達したことを確認するレスポンスを返すだけです:

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const axios = require('axios');

app.use(bodyParser.json());

// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {
  res.status(204).end();
});

// this endpoint receives information about events in the app
app.post('/event', function(req, res) {
  res.status(204).end();
});

app.listen(3000);

注意ダッシュボードでウェブフックのエンドポイントを設定することを忘れないでください。両方とも メッセージAPIサンドボックス.この例では、以下のような POST リクエストにします。 https://YOUR-SERVER/answerそして https://YOUR-SERVER/event.

データの追加

メッセージを送信するには、API認証情報とメッセージを送信するサンドボックスのメッセンジャーIDが必要です。これらの値はすべて サンドボックスページ.ランチの提案を送信するので、テストデータ用に10個のランチの配列を作成することもできます。

エンドユーザーがあなたにメッセージを送るまで、エンドユーザーのメッセンジャーIDは表示されません。エンドポイントが /answerエンドポイントがリクエストを受け取ると、リクエスト本文から from_idを取得できます。メッセージの "to "IDとして使用するために、それを保存することができます:

var user = '12ab3456';
var password = '123AbcdefghIJklM';
var my_id = '123456789012345';

var lunches = ['bbq','teriyaki','salad','a bagel','curry','dumplings','tacos','a sub','bibimbap','pizza'];

// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {
  var from_id = req.body.from.id;
  
  res.status(204).end();
});

着信メッセージに応答する

これで、ユーザーへの返信を作成するためのすべてのピースが揃いました。この単発の例では、axiosを使ってリクエストするだけです。axiosにサンドボックスのURL、データオブジェクト、APIキーとパスワードを渡します。データオブジェクトには、メッセージを送信するサンドボックスID、送信先のユーザーID、ランダムなランチの提案を含むテキストが格納されています。

リクエストを送信した後は、応答やエラーを待つことができます。理想的な状況では、送信した内容の確認以外には何も表示されません:

// when someone messages the number linked to this app, this endpoint "answers"
app.post('/answer', function(req, res) {
  var from_id = req.body.from.id;
  
  axios.post('https://messages-sandbox.nexmo.com/v0.1/messages',{
    "from": { "type": 'messenger', "id": my_id },
    "to": { "type": 'messenger', "id": from_id },
    "message": {
      "content": {
        "type": 'text',
        "text": 'You should have ' + 
          lunches[Math.floor(Math.random() * 10)] + ' for lunch.'
      }
    }
  },{
    auth: {
      username: user,
      password: password
    }
  })
  .then(function (response) {
    console.log('Status: ' + response.status);
    console.log(response.data);
  })
  .catch(function (error) {
    console.error(error);
  });
  
  res.status(204).end();
});

試してみる

サーバーを node server.jsでサーバーを起動します。ホワイトリストに登録されているMessengerクライアントから、Vonageサンドボックスアカウントにメッセージを送信します。(内容は問いません。)メッセージが返信され、コンソールに確認が表示されるはずです。

Getting lunch suggestions via Facebook MessengerMessenger Sandbox

ここまでで メッセンジャーがどのように機能するかがわかったので、次はそれを実際のアプリケーションに組み込んでみましょう。Vonage Messages API Sandbox を使って開発することができます。 Vonage Node.js SDK.準備ができたら、自分のFacebookページを接続して、ライブを開始することができます!

Glitchのサンプルを見てリミックスするでリミックスしてください。

シェア:

https://a.storyblok.com/f/270183/250x250/f231d97f1b/garann-means.png
Garann Meansデベロッパー・エデュケーター

私はJavaScript開発者で、Vonageの開発者教育者です。長年にわたり、テンプレート、Node.js、プログレッシブ・ウェブ・アプリケーション、そしてオフライン・ファースト戦略に熱中してきましたが、私がいつも本当に愛しているのは、便利できちんと文書化されたAPIです。私の目標は、当社のAPIを使用するお客様の体験を、私がお手伝いできる最高のものにすることです。