资讯专栏INFORMATION COLUMN

Facebook Bot 開發小技巧

fizz / 2541人阅读

摘要:所以我們需要先將建立完成,因為上面給了的網址因此建立同名路由一旦設定了若要完全移除就是要讓死掉。上敘動作完成之後,我們就完成前置作業了。

流程

準備環境

使用 ngrok 取得 https 網址

建立與設定 Facebook App 與粉絲團

建立 webhook GET API

設定 Facebook App webhook

實作 webhook POST API 產生對話

準備

由於 Facebook bot 在執行 API 溝通的時候需要使用 SSL 協定即網址要是 https,為了在本地端開發方便。
因此我們需要使用 ngrok 來協助我們產生一個 https 的網址並傳回我們的機器。當然很多文章會介紹您使用 cloudflare 但這邊為了方便開發於是使用另外一種 ssh tunnel 的方式來解決

註冊並登入 ngrok

下載並安裝 ngrok

完成安裝 ngrok 憑證的流程

# 安裝方式:可以下載檔案並放置到 /usr/lcoal/bin 或者使用 brew
$ brew cask install ngrok
# 登入後會看到 ngrok 提供的驗證指令
$ ngrok authtoken [your_token]

# 開始使用
$ ngrok http [port]

啟動之後畫面如下:

建立 Facebook App 與粉絲專頁

官方教學

建立好 App 與粉絲團之後接下來為了設定 webhook,網址的部分請給定 ngrok 的網址,例如
https://[hash_code].ngrok.io/webhook。而 token 則是您自訂任意的字串,稍後需要在 API 中使用驗證。

因為設定 webhook 網址時,facebook 會發一個 request 給測試該網址是否正常運作,如果不正確的話,那就沒辦法進入下一階段了。
所以我們需要先將 GET API 建立完成,因為上面給了 webhook 的網址因此建立同名路由

app.get("/webhook/", function (req, res) {
  if (req.query["hub.verify_token"] === "") {
    res.send(req.query["hub.challenge"]);
  }
  res.send("Error, wrong validation token");
})

一旦設定了若要完全移除就是要讓 API 死掉 8H。

上敘動作完成之後,我們就完成前置作業了。接著下來就是實作與機器人對談的部分

var express = require("express")
var bodyParser = require("body-parser")
var request = require("request")
var app = express()
var token = ""
var facebookApi = "https://graph.facebook.com/v2.6/me/messages"

app.use(bodyParser.urlencoded({
  extended: true
}))
app.use(bodyParser.json())

app.get("/", function (req, res) {
  res.send("Hi, server")
})

app.get("/webhook/", function (req, res) {
  if (req.query["hub.verify_token"] === "abcd") {
    res.send(req.query["hub.challenge"]);
  }
  res.send("Error, wrong validation token");
})

app.post("/webhook/", function (req, res) {
  console.log(req.body.entry[0])
  var messages = req.body.entry[0].messaging

  for (var i = 0; i < messages.length; i++) {
    var event = messages[i]
    var sender = event.sender.id

    if (event.message && event.message.text) {
      var text = event.message.text
      sendTextMessage(sender, text)
    }
  }
  res.sendStatus(200)
})

app.listen(8080, function () {
  console.log("Listen on port 8080")
})

/**
 * Functions
 */

function sendTextMessage (sender, text) {
  messageData = {
    text: text
  }

  request({
    url: facebookApi,
    qs: { access_token: token },
    method: "POST",
    json: {
      recipient: { id: sender },
      message: messageData
    }
  }, function (err, res, body) {
    if (err)
      console.log("Error sending message: ", err)
    else if (res.body.error)
      console.log("Error: ", res.body.error)
  })
}

到此我們就完成了一個簡單的 Facebook BOT 應用。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80209.html

相关文章

  • Win32/64-Napolar 木马界的明星

    摘要:为了了解被这种木马感染的地区分布情况,我们分析了相关检测部分的运行状况。受到感染影响最严重的区域为中南美的哥伦比亚委内瑞拉秘鲁墨西哥阿根廷以及亚洲的菲利宾越南和欧洲的波兰。通信协议目前发现的服务器有。响应结构采用以分割的字符串数组的形式。 在最近几个星期里的AVAST恶意样本分析名单中,Win32/64:Napolar拥有极高的文件和网络屏蔽率。另外,我们发现了被冠以Solarbot名...

    Amio 评论0 收藏0
  • 邓力:如何把深度强化学习用于BOT开发

    摘要:月,谷歌宣布要开发驱动的,即谷歌助理。由于最近机器学习和有了巨大进展,人工智能现在已经成为可能。人工智能会采用迭代和反馈回路来自我发展,并趋于完美。这种的奖励函数用于深度强化学习算法先简单称之为情感智能不可能被轻而易举地量化。 今年三月,微软CEO Satya Nadella谈到现在的行业趋势是更普遍地使用人类语言与计算设备交互,他将这一趋势称为对话即平台(conversationas a ...

    cnsworder 评论0 收藏0
  • [譯] Houdini: 你還沒聽說!這可能是 CSS 下一件最令人興奮的大事

    摘要:接下來我們將會更具體的說明是什麼東西和這傢伙會怎麼解決這些問題,並且列出目前開發中一些令人興奮的功能。這個功能甚至還沒有一個瀏覽器支援。完整的清單請查閱目前還未被寫入規範,意思是這邊提到任何內容極有可能會改變。 譯者:其實...我想說這可能是最令我感到興奮..但又害怕頭痛的功能... 附上原文連結 你曾經想要使用某個 CSS 的新功能,但是最後卻因為這個功能瀏覽器還未全面支援而放棄了嗎...

    bergwhite 评论0 收藏0
  • 「PPT 分享」跟著 Laravel'5.1 一起 成為更好的 PHP 開發

    摘要:本文经授权转自社区推荐一份很棒的。前往观看跟著一起成為更好的開發者 本文经授权转自 PHPHub 社区 推荐一份很棒的 PPT。 前往观看:跟著 Laravel5.1 一起 成為更好的 PHP 開發者.pdf showImg(https://segmentfault.com/img/remote/1460000006781396);

    EsgynChina 评论0 收藏0
  • DevOps:持續整合 & 持續交付(Docker、CircleCI、AWS)

    摘要:原文出處持續整合持續交付這篇文章將一步一步介紹如何使用與來完成持續整合與持續交付的開發流程。前言什麼是持續整合持續交付持續整合持續交付,簡稱,具體介紹可以參考山姆鍋對持續整合持續部署持續交付的定義這篇文章。 原文出處:DevOps:持續整合&持續交付(Docker、CircleCI、AWS) showImg(https://segmentfault.com/img/bVlxh...

    Euphoria 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<