Cara membangun bot WhatsApp untuk daftar tugas menggunakan API Percakapan Terprogram Bird.
Burung
5 Feb 2020
1 min read

Poin Penting
API Percakapan Dapat Diprogram Bird menyatukan WhatsApp, Messenger, dan SMS ke dalam satu lapisan komunikasi, menyederhanakan pengembangan bot multi-saluran.
Anda dapat dengan cepat membuat prototipe bot daftar tugas WhatsApp menggunakan webhook dan permintaan POST sederhana.
Alat seperti ngrok memungkinkan Anda mengekspos server lokal Anda untuk pengujian webhook tanpa pengaturan hosting yang kompleks.
API menangani percakapan di beberapa saluran, memungkinkan satu basis logika untuk WhatsApp, WeChat, dan aplikasi lainnya.
Gunakan endpoint archiveConversation untuk menutup percakapan atau “topik,” yang ideal untuk pelacakan dukungan atau alur kerja.
Logika bot dapat mengelola percakapan bersamaan dengan aman dalam memori menggunakan struktur data yang sederhana.
Handler webhook yang sama berfungsi di berbagai saluran—Bird secara otomatis mengarahkan balasan berdasarkan ID percakapan yang berasal.
Sorotan Tanya jawab
Seberapa sulit membangun bot WhatsApp menggunakan API Bird?
Ini sangat mudah. Dengan webhook dan beberapa panggilan API, Anda bisa membuat bot fungsional yang membaca dan membalas pesan dalam beberapa menit.
Apakah saya perlu pengaturan khusus untuk menerima pesan?
Ya — bot harus dapat diakses dari internet. Alat seperti ngrok membantu membuat terowongan aman dari mesin lokal Anda.
Bisakah saya menggunakan basis kode yang sama untuk aplikasi pesan yang berbeda?
Absolut. API Percakapan mengabstraksi saluran, sehingga bot Anda dapat berjalan di WhatsApp, WeChat, atau Messenger dengan logika yang identik.
Bagaimana cara menutup atau reset percakapan?
Kirim permintaan PATCH ke endpoint percakapan dengan status yang tepat untuk mengarsipkannya. Setiap pesan baru secara otomatis membuka percakapan baru.
Di mana saya bisa menemukan contoh kode?
A: Demo kerja penuh — Wabot di GitHub — menunjukkan implementasi penanganan pesan, konkuren, dan pengarsipan.
Bird baru-baru ini meluncurkan Percakapan yang Dapat Diprogram. Ini memungkinkan perusahaan menggabungkan platform komunikasi seperti WhatsApp, Messenger, dan SMS ke dalam sistem mereka — menggunakan satu API.
Saya ingin mencobanya, jadi saya membuat bot WhatsApp untuk daftar tugas, karena siapa yang tidak membutuhkan daftar tugas otomatis untuk membantu mengatur harinya? Ini mungkin terdengar rumit, tetapi sebenarnya mudah, dan saya ingin memberi tahu Anda semua tentang itu.
Sekarang, saya bekerja di MessageBird, jadi saya bisa langsung terjun dan mulai membangun. Jika Anda mencoba ini, Anda perlu meminta akses awal. Tetapi begitu Anda disiapkan dengan saluran WhatsApp, Anda dapat masuk ke Dasbor di situs web MessageBird dan mulai.
Bird baru-baru ini meluncurkan Percakapan yang Dapat Diprogram. Ini memungkinkan perusahaan menggabungkan platform komunikasi seperti WhatsApp, Messenger, dan SMS ke dalam sistem mereka — menggunakan satu API.
Saya ingin mencobanya, jadi saya membuat bot WhatsApp untuk daftar tugas, karena siapa yang tidak membutuhkan daftar tugas otomatis untuk membantu mengatur harinya? Ini mungkin terdengar rumit, tetapi sebenarnya mudah, dan saya ingin memberi tahu Anda semua tentang itu.
Sekarang, saya bekerja di MessageBird, jadi saya bisa langsung terjun dan mulai membangun. Jika Anda mencoba ini, Anda perlu meminta akses awal. Tetapi begitu Anda disiapkan dengan saluran WhatsApp, Anda dapat masuk ke Dasbor di situs web MessageBird dan mulai.
Bird baru-baru ini meluncurkan Percakapan yang Dapat Diprogram. Ini memungkinkan perusahaan menggabungkan platform komunikasi seperti WhatsApp, Messenger, dan SMS ke dalam sistem mereka — menggunakan satu API.
Saya ingin mencobanya, jadi saya membuat bot WhatsApp untuk daftar tugas, karena siapa yang tidak membutuhkan daftar tugas otomatis untuk membantu mengatur harinya? Ini mungkin terdengar rumit, tetapi sebenarnya mudah, dan saya ingin memberi tahu Anda semua tentang itu.
Sekarang, saya bekerja di MessageBird, jadi saya bisa langsung terjun dan mulai membangun. Jika Anda mencoba ini, Anda perlu meminta akses awal. Tetapi begitu Anda disiapkan dengan saluran WhatsApp, Anda dapat masuk ke Dasbor di situs web MessageBird dan mulai.
Menyiapkan lingkungan bot WhatsApp Anda
Hal pertama yang saya lakukan adalah membaca dokumentasi. Saya belajar bahwa, untuk mendapatkan pesan dari bot, saya harus menggunakan webhook. Ini berarti bahwa bot saya harus dapat diakses dari internet. Saat membangun API seperti ini, penting untuk mengikuti praktik terbaik versi API untuk pemeliharaan. Karena saya baru saja mulai mengkode itu, saya memutuskan untuk menggunakan ngrok. Ini membuat terowongan dari internet publik ke localhost kesayangan Anda dengan port 5007. Ayo lakukan!
ngrok http 5007 -region eu -subdomain todobot
Hal pertama yang saya lakukan adalah membaca dokumentasi. Saya belajar bahwa, untuk mendapatkan pesan dari bot, saya harus menggunakan webhook. Ini berarti bahwa bot saya harus dapat diakses dari internet. Saat membangun API seperti ini, penting untuk mengikuti praktik terbaik versi API untuk pemeliharaan. Karena saya baru saja mulai mengkode itu, saya memutuskan untuk menggunakan ngrok. Ini membuat terowongan dari internet publik ke localhost kesayangan Anda dengan port 5007. Ayo lakukan!
ngrok http 5007 -region eu -subdomain todobot
Hal pertama yang saya lakukan adalah membaca dokumentasi. Saya belajar bahwa, untuk mendapatkan pesan dari bot, saya harus menggunakan webhook. Ini berarti bahwa bot saya harus dapat diakses dari internet. Saat membangun API seperti ini, penting untuk mengikuti praktik terbaik versi API untuk pemeliharaan. Karena saya baru saja mulai mengkode itu, saya memutuskan untuk menggunakan ngrok. Ini membuat terowongan dari internet publik ke localhost kesayangan Anda dengan port 5007. Ayo lakukan!
ngrok http 5007 -region eu -subdomain todobot
Membuat webhook Anda dan menghubungkan Bird
Selanjutnya, saya perlu melakukan panggilan ke API Percakapan Terprogram untuk membuat webhook. Ini adalah POST ke https://conversations.messagebird.com/v1/webhooks dan terlihat seperti ini:
func main() {// define the webhook json payload wh := struct { Events []string `json:"events"` ChannelID string `json:"channelId"` URL string `json:"url"` } { // we would like to be notified on the URL URL: "https://todobot.eu.ngrok.io/create-hook", // whenever a message gets created Events: []string{"message.created"}, // on the WhatsApp channel with ID ChannelID: "23a780701b8849f7b974d8620a89a279", } // encode the payload to json var b bytes.Buffer err := json.NewEncoder(&b).Encode(&wh) if err != nil { panic(err) } // create the http request and set authorization header req, err := http.NewRequest("POST", "https://conversations.messagebird.com/v1/webhooks", &b) req.Header.Set("Authorization", "AccessKey todo-your-access-key") req.Header.Set("Content-Type", "application/json") // fire the http request client := &http.Client{} resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close()// is everything ok? body, _ := ioutil.ReadAll(resp.Body) if resp.StatusCode >= http.StatusBadRequest { panic(fmt.Errorf("Bad response code from api when trying to create webhook: %s. Body: %s", resp.Status, string(body))) } else { log.Println("All good. response body: ", string(body)) } }
Manis. Sekarang API Percakapan akan melakukan permintaan POST ke:
https://todobot.eu.ngrok.io/create-hook setiap kali pesan baru dibuat di saluran WhatsApp yang Anda atur sebelumnya.
Inilah seperti apa payload webhook:
{ "conversation":{ "id":"55c66895c22a40e39a8e6bd321ec192e", "contactId":"db4dd5087fb343738e968a323f640576", "status":"active", "createdDatetime":"2018-08-17T10:14:14Z", "updatedDatetime":"2018-08-17T14:30:31.915292912Z", "lastReceivedDatetime":"2018-08-17T14:30:31.898389294Z" }, "message":{ "id":"ddb150149e2c4036a48f581544e22cfe", "conversationId":"55c66895c22a40e39a8e6bd321ec192e", "channelId":"23a780701b8849f7b974d8620a89a279", "status":"received", "type":"text", "direction":"received", "content":{ "text":"add buy milk" }, "createdDatetime":"2018-08-17T14:30:31.898389294Z", "updatedDatetime":"2018-08-17T14:30:31.915292912Z" }, "type":"message.created" }
Kita ingin menjawab pesan-pesan tersebut. Mari kita mulai dengan menjawabnya, bagaimana menurut Anda?
// define the structs where we'll parse the webhook payload into type whPayload struct { Conversation conversation `json:"conversation"` Message message `json:"message"` Type string `json:"type"` } type message struct { ID string `json:"id"` Direction string `json:"direction"` Type string `json:"type"` Content content `json:"content"` } type content struct { Text string `json:"text"` } type conversation struct { ID string `json:"id"` } func main() { http.HandleFunc("/create-hook", createHookHandler) log.Fatal(http.ListenAndServe(*httpListenAddress, nil)) } // createHookHandler is an http handler that will handle webhook requests func createHookHandler(w http.ResponseWriter, r *http.Request) { // parse the incoming json payload whp := &whPayload{} err := json.NewDecoder(r.Body).Decode(whp) if err != nil { log.Println("Err: got weird body on the webhook") w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Internal Server Error") return } if whp.Message.Direction != "received" { // you will get *all* messages on the webhook. Even the ones this bot sends to the channel. We don't want to answer those. fmt.Fprintf(w, "ok") return } // echo: respond what we get err = respond(whp.Conversation.ID, whp.Message.Content.Text) if err != nil { log.Println("Err: ", err) w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Internal Server Error")return } w.WriteHeader(http.StatusOK) fmt.Fprintf(w, "ok") }
Selanjutnya, saya perlu melakukan panggilan ke API Percakapan Terprogram untuk membuat webhook. Ini adalah POST ke https://conversations.messagebird.com/v1/webhooks dan terlihat seperti ini:
func main() {// define the webhook json payload wh := struct { Events []string `json:"events"` ChannelID string `json:"channelId"` URL string `json:"url"` } { // we would like to be notified on the URL URL: "https://todobot.eu.ngrok.io/create-hook", // whenever a message gets created Events: []string{"message.created"}, // on the WhatsApp channel with ID ChannelID: "23a780701b8849f7b974d8620a89a279", } // encode the payload to json var b bytes.Buffer err := json.NewEncoder(&b).Encode(&wh) if err != nil { panic(err) } // create the http request and set authorization header req, err := http.NewRequest("POST", "https://conversations.messagebird.com/v1/webhooks", &b) req.Header.Set("Authorization", "AccessKey todo-your-access-key") req.Header.Set("Content-Type", "application/json") // fire the http request client := &http.Client{} resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close()// is everything ok? body, _ := ioutil.ReadAll(resp.Body) if resp.StatusCode >= http.StatusBadRequest { panic(fmt.Errorf("Bad response code from api when trying to create webhook: %s. Body: %s", resp.Status, string(body))) } else { log.Println("All good. response body: ", string(body)) } }
Manis. Sekarang API Percakapan akan melakukan permintaan POST ke:
https://todobot.eu.ngrok.io/create-hook setiap kali pesan baru dibuat di saluran WhatsApp yang Anda atur sebelumnya.
Inilah seperti apa payload webhook:
{ "conversation":{ "id":"55c66895c22a40e39a8e6bd321ec192e", "contactId":"db4dd5087fb343738e968a323f640576", "status":"active", "createdDatetime":"2018-08-17T10:14:14Z", "updatedDatetime":"2018-08-17T14:30:31.915292912Z", "lastReceivedDatetime":"2018-08-17T14:30:31.898389294Z" }, "message":{ "id":"ddb150149e2c4036a48f581544e22cfe", "conversationId":"55c66895c22a40e39a8e6bd321ec192e", "channelId":"23a780701b8849f7b974d8620a89a279", "status":"received", "type":"text", "direction":"received", "content":{ "text":"add buy milk" }, "createdDatetime":"2018-08-17T14:30:31.898389294Z", "updatedDatetime":"2018-08-17T14:30:31.915292912Z" }, "type":"message.created" }
Kita ingin menjawab pesan-pesan tersebut. Mari kita mulai dengan menjawabnya, bagaimana menurut Anda?
// define the structs where we'll parse the webhook payload into type whPayload struct { Conversation conversation `json:"conversation"` Message message `json:"message"` Type string `json:"type"` } type message struct { ID string `json:"id"` Direction string `json:"direction"` Type string `json:"type"` Content content `json:"content"` } type content struct { Text string `json:"text"` } type conversation struct { ID string `json:"id"` } func main() { http.HandleFunc("/create-hook", createHookHandler) log.Fatal(http.ListenAndServe(*httpListenAddress, nil)) } // createHookHandler is an http handler that will handle webhook requests func createHookHandler(w http.ResponseWriter, r *http.Request) { // parse the incoming json payload whp := &whPayload{} err := json.NewDecoder(r.Body).Decode(whp) if err != nil { log.Println("Err: got weird body on the webhook") w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Internal Server Error") return } if whp.Message.Direction != "received" { // you will get *all* messages on the webhook. Even the ones this bot sends to the channel. We don't want to answer those. fmt.Fprintf(w, "ok") return } // echo: respond what we get err = respond(whp.Conversation.ID, whp.Message.Content.Text) if err != nil { log.Println("Err: ", err) w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Internal Server Error")return } w.WriteHeader(http.StatusOK) fmt.Fprintf(w, "ok") }
Selanjutnya, saya perlu melakukan panggilan ke API Percakapan Terprogram untuk membuat webhook. Ini adalah POST ke https://conversations.messagebird.com/v1/webhooks dan terlihat seperti ini:
func main() {// define the webhook json payload wh := struct { Events []string `json:"events"` ChannelID string `json:"channelId"` URL string `json:"url"` } { // we would like to be notified on the URL URL: "https://todobot.eu.ngrok.io/create-hook", // whenever a message gets created Events: []string{"message.created"}, // on the WhatsApp channel with ID ChannelID: "23a780701b8849f7b974d8620a89a279", } // encode the payload to json var b bytes.Buffer err := json.NewEncoder(&b).Encode(&wh) if err != nil { panic(err) } // create the http request and set authorization header req, err := http.NewRequest("POST", "https://conversations.messagebird.com/v1/webhooks", &b) req.Header.Set("Authorization", "AccessKey todo-your-access-key") req.Header.Set("Content-Type", "application/json") // fire the http request client := &http.Client{} resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close()// is everything ok? body, _ := ioutil.ReadAll(resp.Body) if resp.StatusCode >= http.StatusBadRequest { panic(fmt.Errorf("Bad response code from api when trying to create webhook: %s. Body: %s", resp.Status, string(body))) } else { log.Println("All good. response body: ", string(body)) } }
Manis. Sekarang API Percakapan akan melakukan permintaan POST ke:
https://todobot.eu.ngrok.io/create-hook setiap kali pesan baru dibuat di saluran WhatsApp yang Anda atur sebelumnya.
Inilah seperti apa payload webhook:
{ "conversation":{ "id":"55c66895c22a40e39a8e6bd321ec192e", "contactId":"db4dd5087fb343738e968a323f640576", "status":"active", "createdDatetime":"2018-08-17T10:14:14Z", "updatedDatetime":"2018-08-17T14:30:31.915292912Z", "lastReceivedDatetime":"2018-08-17T14:30:31.898389294Z" }, "message":{ "id":"ddb150149e2c4036a48f581544e22cfe", "conversationId":"55c66895c22a40e39a8e6bd321ec192e", "channelId":"23a780701b8849f7b974d8620a89a279", "status":"received", "type":"text", "direction":"received", "content":{ "text":"add buy milk" }, "createdDatetime":"2018-08-17T14:30:31.898389294Z", "updatedDatetime":"2018-08-17T14:30:31.915292912Z" }, "type":"message.created" }
Kita ingin menjawab pesan-pesan tersebut. Mari kita mulai dengan menjawabnya, bagaimana menurut Anda?
// define the structs where we'll parse the webhook payload into type whPayload struct { Conversation conversation `json:"conversation"` Message message `json:"message"` Type string `json:"type"` } type message struct { ID string `json:"id"` Direction string `json:"direction"` Type string `json:"type"` Content content `json:"content"` } type content struct { Text string `json:"text"` } type conversation struct { ID string `json:"id"` } func main() { http.HandleFunc("/create-hook", createHookHandler) log.Fatal(http.ListenAndServe(*httpListenAddress, nil)) } // createHookHandler is an http handler that will handle webhook requests func createHookHandler(w http.ResponseWriter, r *http.Request) { // parse the incoming json payload whp := &whPayload{} err := json.NewDecoder(r.Body).Decode(whp) if err != nil { log.Println("Err: got weird body on the webhook") w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Internal Server Error") return } if whp.Message.Direction != "received" { // you will get *all* messages on the webhook. Even the ones this bot sends to the channel. We don't want to answer those. fmt.Fprintf(w, "ok") return } // echo: respond what we get err = respond(whp.Conversation.ID, whp.Message.Content.Text) if err != nil { log.Println("Err: ", err) w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Internal Server Error")return } w.WriteHeader(http.StatusOK) fmt.Fprintf(w, "ok") }
Mengirim tanggapan dan menangani pesan
Sekarang, untuk bagian yang menarik. Lakukan permintaan POST ke:
https://conversations.messagebird.com/v1/conversations/<conversationID>/messages untuk menjawab permintaan tersebut.
func respond(conversationID, responseBody string) error { u := fmt.Sprintf("https://conversations.messagebird.com/v1/conversations/%s/messages", conversationID)msg := message{ Content: content{ Text: responseBody, }, Type: "text", } var b bytes.Buffer err := json.NewEncoder(&b).Encode(&msg) if err != nil { return fmt.Errorf("Error encoding buffer: %v", err) } req, err := http.NewRequest("POST", u.String(), &b) req.Header.Set("Authorization", "AccessKey todo-your-access-key") req.Header.Set("Content-Type", "application/json")client := &http.Client{} resp, err := client.Do(req) if err != nil { return err } defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body) if resp.StatusCode != http.StatusCreated { return fmt.Errorf("Bad response code from api when trying to create message: %s. Body: %s", resp.Status, string(body)) } log.Println("All good. Response body: ", string(body)) return nil }
Itu dia. Ini semua yang Anda butuhkan untuk membuat bot yang bertindak seperti manusia berusia 5 tahun.
Berikut adalah alasan mengapa menggunakan API Percakapan Bird membuat pengembangan bot WhatsApp cepat dan dapat diskalakan:
Fitur | Apa yang diselesaikannya |
|---|---|
ID percakapan terpadu | Menjaga satu utas di seluruh aplikasi seperti WhatsApp, WeChat, Messenger |
API tunggal untuk semua saluran | Memanfaatkan logika bot tanpa menulis ulang untuk setiap platform |
Otomatisasi berbasis webhook | Penanganan respons cepat tanpa polling |
Arsip + buka kembali topik | Mengatur riwayat dukungan dan alur kerja |
Struktur aman untuk konkruensi | Menangani banyak obrolan sekaligus secara andal |
Sekarang, mari kita dorong untuk membangun seluruh daftar tugas. Pertama, modifikasi fungsi createHookHandler sedikit sehingga memanggil fungsi handleMessage baru alih-alih respond.
func createHookHandler(w http.ResponseWriter, r *http.Request) { ... err = handleMessage(whp) ... }
handle akan secara sederhana memparsing pesan, melakukan beberapa pekerjaan, dan memilih respons. Mari kita lihat perintah “tambah”:
func handleMessage(whp *whPayload) error { // every conversation has a todo list list := manager.fetch(whp.Conversation.ID) // parse the command from the message body: it's the first word text := whp.Message.Content.Text text = regexp.MustCompile(" +").ReplaceAllString(text, " ") parts := strings.Split(text, " ") command := strings.ToLower(parts[0]) // default message responseBody := "I don't understand. Type 'help' to get help." switch command { ... case "add": if len(parts) < 2 { return respond(whp.Conversation.ID, "err... the 'add' command needs a second param: the todo item you want to save. Something like 'add buy milk'.") } // get the item from the message body item := strings.Join(parts[1:], " ")list.add(item) responseBody = "added." ... return respond(whp.Conversation.ID, responseBody) }
Di sini, kita mengatur:list := manager.fetch(whp.Conversation.ID). Pada dasarnya, “manajer” adalah peta yang aman untuk konkruensi yang memetakan ID percakapan ke daftar tugas.
Daftar tugas adalah iris string yang aman untuk konkruensi. Semua di memori!
Sekarang, untuk bagian yang menarik. Lakukan permintaan POST ke:
https://conversations.messagebird.com/v1/conversations/<conversationID>/messages untuk menjawab permintaan tersebut.
func respond(conversationID, responseBody string) error { u := fmt.Sprintf("https://conversations.messagebird.com/v1/conversations/%s/messages", conversationID)msg := message{ Content: content{ Text: responseBody, }, Type: "text", } var b bytes.Buffer err := json.NewEncoder(&b).Encode(&msg) if err != nil { return fmt.Errorf("Error encoding buffer: %v", err) } req, err := http.NewRequest("POST", u.String(), &b) req.Header.Set("Authorization", "AccessKey todo-your-access-key") req.Header.Set("Content-Type", "application/json")client := &http.Client{} resp, err := client.Do(req) if err != nil { return err } defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body) if resp.StatusCode != http.StatusCreated { return fmt.Errorf("Bad response code from api when trying to create message: %s. Body: %s", resp.Status, string(body)) } log.Println("All good. Response body: ", string(body)) return nil }
Itu dia. Ini semua yang Anda butuhkan untuk membuat bot yang bertindak seperti manusia berusia 5 tahun.
Berikut adalah alasan mengapa menggunakan API Percakapan Bird membuat pengembangan bot WhatsApp cepat dan dapat diskalakan:
Fitur | Apa yang diselesaikannya |
|---|---|
ID percakapan terpadu | Menjaga satu utas di seluruh aplikasi seperti WhatsApp, WeChat, Messenger |
API tunggal untuk semua saluran | Memanfaatkan logika bot tanpa menulis ulang untuk setiap platform |
Otomatisasi berbasis webhook | Penanganan respons cepat tanpa polling |
Arsip + buka kembali topik | Mengatur riwayat dukungan dan alur kerja |
Struktur aman untuk konkruensi | Menangani banyak obrolan sekaligus secara andal |
Sekarang, mari kita dorong untuk membangun seluruh daftar tugas. Pertama, modifikasi fungsi createHookHandler sedikit sehingga memanggil fungsi handleMessage baru alih-alih respond.
func createHookHandler(w http.ResponseWriter, r *http.Request) { ... err = handleMessage(whp) ... }
handle akan secara sederhana memparsing pesan, melakukan beberapa pekerjaan, dan memilih respons. Mari kita lihat perintah “tambah”:
func handleMessage(whp *whPayload) error { // every conversation has a todo list list := manager.fetch(whp.Conversation.ID) // parse the command from the message body: it's the first word text := whp.Message.Content.Text text = regexp.MustCompile(" +").ReplaceAllString(text, " ") parts := strings.Split(text, " ") command := strings.ToLower(parts[0]) // default message responseBody := "I don't understand. Type 'help' to get help." switch command { ... case "add": if len(parts) < 2 { return respond(whp.Conversation.ID, "err... the 'add' command needs a second param: the todo item you want to save. Something like 'add buy milk'.") } // get the item from the message body item := strings.Join(parts[1:], " ")list.add(item) responseBody = "added." ... return respond(whp.Conversation.ID, responseBody) }
Di sini, kita mengatur:list := manager.fetch(whp.Conversation.ID). Pada dasarnya, “manajer” adalah peta yang aman untuk konkruensi yang memetakan ID percakapan ke daftar tugas.
Daftar tugas adalah iris string yang aman untuk konkruensi. Semua di memori!
Sekarang, untuk bagian yang menarik. Lakukan permintaan POST ke:
https://conversations.messagebird.com/v1/conversations/<conversationID>/messages untuk menjawab permintaan tersebut.
func respond(conversationID, responseBody string) error { u := fmt.Sprintf("https://conversations.messagebird.com/v1/conversations/%s/messages", conversationID)msg := message{ Content: content{ Text: responseBody, }, Type: "text", } var b bytes.Buffer err := json.NewEncoder(&b).Encode(&msg) if err != nil { return fmt.Errorf("Error encoding buffer: %v", err) } req, err := http.NewRequest("POST", u.String(), &b) req.Header.Set("Authorization", "AccessKey todo-your-access-key") req.Header.Set("Content-Type", "application/json")client := &http.Client{} resp, err := client.Do(req) if err != nil { return err } defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body) if resp.StatusCode != http.StatusCreated { return fmt.Errorf("Bad response code from api when trying to create message: %s. Body: %s", resp.Status, string(body)) } log.Println("All good. Response body: ", string(body)) return nil }
Itu dia. Ini semua yang Anda butuhkan untuk membuat bot yang bertindak seperti manusia berusia 5 tahun.
Berikut adalah alasan mengapa menggunakan API Percakapan Bird membuat pengembangan bot WhatsApp cepat dan dapat diskalakan:
Fitur | Apa yang diselesaikannya |
|---|---|
ID percakapan terpadu | Menjaga satu utas di seluruh aplikasi seperti WhatsApp, WeChat, Messenger |
API tunggal untuk semua saluran | Memanfaatkan logika bot tanpa menulis ulang untuk setiap platform |
Otomatisasi berbasis webhook | Penanganan respons cepat tanpa polling |
Arsip + buka kembali topik | Mengatur riwayat dukungan dan alur kerja |
Struktur aman untuk konkruensi | Menangani banyak obrolan sekaligus secara andal |
Sekarang, mari kita dorong untuk membangun seluruh daftar tugas. Pertama, modifikasi fungsi createHookHandler sedikit sehingga memanggil fungsi handleMessage baru alih-alih respond.
func createHookHandler(w http.ResponseWriter, r *http.Request) { ... err = handleMessage(whp) ... }
handle akan secara sederhana memparsing pesan, melakukan beberapa pekerjaan, dan memilih respons. Mari kita lihat perintah “tambah”:
func handleMessage(whp *whPayload) error { // every conversation has a todo list list := manager.fetch(whp.Conversation.ID) // parse the command from the message body: it's the first word text := whp.Message.Content.Text text = regexp.MustCompile(" +").ReplaceAllString(text, " ") parts := strings.Split(text, " ") command := strings.ToLower(parts[0]) // default message responseBody := "I don't understand. Type 'help' to get help." switch command { ... case "add": if len(parts) < 2 { return respond(whp.Conversation.ID, "err... the 'add' command needs a second param: the todo item you want to save. Something like 'add buy milk'.") } // get the item from the message body item := strings.Join(parts[1:], " ")list.add(item) responseBody = "added." ... return respond(whp.Conversation.ID, responseBody) }
Di sini, kita mengatur:list := manager.fetch(whp.Conversation.ID). Pada dasarnya, “manajer” adalah peta yang aman untuk konkruensi yang memetakan ID percakapan ke daftar tugas.
Daftar tugas adalah iris string yang aman untuk konkruensi. Semua di memori!
Mengarsipkan percakapan dan meningkatkan skala bot Anda
Hal penting lainnya! Anda dapat mengarsipkan percakapan. Dalam beberapa aplikasi, seperti CRM, penting untuk melacak interaksi tertentu — untuk melacak efektivitas karyawan dukungan pelanggan, misalnya. API Percakapan memungkinkan Anda mengarsipkan percakapan untuk “menutup” topik. Jika pengguna/pelanggan mengirim pesan lain, API Percakapan akan secara otomatis membuka topik baru.
Mengelola siklus hidup percakapan
Juga. Melakukan permintaan PATCH ke https://conversations.messagebird.com/v1/conversations/{id} dengan status yang tepat di dalam badan memungkinkan Anda untuk mengarsipkan percakapan dengan id tersebut. Kami melakukan ini dengan perintah “bye”:
case "bye": archiveConversation(whp.Conversation.ID) manager.close(whp.Conversation.ID) responseBody = "bye!"
archiveConversation akan melakukan permintaan PATCH dan manager.close(whp.Conversation.ID) akan menghapus percakapan daftar yang harus dilakukan.
Tapi hei, Percakapan yang dapat diprogram adalah solusi omni-channel. Bagaimana jika Anda ingin menggunakan ulang kode bot untuk platform yang berbeda, seperti WeChat? Pendekatan multi-channel ini adalah bagian dari strategi mengalihkan pertanyaan ke saluran biaya lebih rendah. Bagaimana Anda akan melakukannya?
Hanya buat webhook baru untuk menargetkan saluran itu! Sebuah webhook yang mengirim permintaan ke url yang sama https://todobot.eu.ngrok.io/create-hook yang kami gunakan untuk WhatsApp!
Ini akan berfungsi karena kode penangan selalu menggunakan conversationID dari payload webhook untuk menjawab pesan daripada channelID yang dikodekan secara hard. API Percakapan MessageBird secara otomatis akan menentukan saluran untuk percakapan untuk mengirim pesan Anda.
Apakah Anda ingin membangun bot Anda sendiri? Lihat kode lengkap di Github: Wabot di Github, minta akses awal ke WhatsApp dengan mengunjungi halaman WhatsApp dan mengklik tombol Kontak Penjualan untuk mengisi formulir. Selamat botting!
Hal penting lainnya! Anda dapat mengarsipkan percakapan. Dalam beberapa aplikasi, seperti CRM, penting untuk melacak interaksi tertentu — untuk melacak efektivitas karyawan dukungan pelanggan, misalnya. API Percakapan memungkinkan Anda mengarsipkan percakapan untuk “menutup” topik. Jika pengguna/pelanggan mengirim pesan lain, API Percakapan akan secara otomatis membuka topik baru.
Mengelola siklus hidup percakapan
Juga. Melakukan permintaan PATCH ke https://conversations.messagebird.com/v1/conversations/{id} dengan status yang tepat di dalam badan memungkinkan Anda untuk mengarsipkan percakapan dengan id tersebut. Kami melakukan ini dengan perintah “bye”:
case "bye": archiveConversation(whp.Conversation.ID) manager.close(whp.Conversation.ID) responseBody = "bye!"
archiveConversation akan melakukan permintaan PATCH dan manager.close(whp.Conversation.ID) akan menghapus percakapan daftar yang harus dilakukan.
Tapi hei, Percakapan yang dapat diprogram adalah solusi omni-channel. Bagaimana jika Anda ingin menggunakan ulang kode bot untuk platform yang berbeda, seperti WeChat? Pendekatan multi-channel ini adalah bagian dari strategi mengalihkan pertanyaan ke saluran biaya lebih rendah. Bagaimana Anda akan melakukannya?
Hanya buat webhook baru untuk menargetkan saluran itu! Sebuah webhook yang mengirim permintaan ke url yang sama https://todobot.eu.ngrok.io/create-hook yang kami gunakan untuk WhatsApp!
Ini akan berfungsi karena kode penangan selalu menggunakan conversationID dari payload webhook untuk menjawab pesan daripada channelID yang dikodekan secara hard. API Percakapan MessageBird secara otomatis akan menentukan saluran untuk percakapan untuk mengirim pesan Anda.
Apakah Anda ingin membangun bot Anda sendiri? Lihat kode lengkap di Github: Wabot di Github, minta akses awal ke WhatsApp dengan mengunjungi halaman WhatsApp dan mengklik tombol Kontak Penjualan untuk mengisi formulir. Selamat botting!
Hal penting lainnya! Anda dapat mengarsipkan percakapan. Dalam beberapa aplikasi, seperti CRM, penting untuk melacak interaksi tertentu — untuk melacak efektivitas karyawan dukungan pelanggan, misalnya. API Percakapan memungkinkan Anda mengarsipkan percakapan untuk “menutup” topik. Jika pengguna/pelanggan mengirim pesan lain, API Percakapan akan secara otomatis membuka topik baru.
Mengelola siklus hidup percakapan
Juga. Melakukan permintaan PATCH ke https://conversations.messagebird.com/v1/conversations/{id} dengan status yang tepat di dalam badan memungkinkan Anda untuk mengarsipkan percakapan dengan id tersebut. Kami melakukan ini dengan perintah “bye”:
case "bye": archiveConversation(whp.Conversation.ID) manager.close(whp.Conversation.ID) responseBody = "bye!"
archiveConversation akan melakukan permintaan PATCH dan manager.close(whp.Conversation.ID) akan menghapus percakapan daftar yang harus dilakukan.
Tapi hei, Percakapan yang dapat diprogram adalah solusi omni-channel. Bagaimana jika Anda ingin menggunakan ulang kode bot untuk platform yang berbeda, seperti WeChat? Pendekatan multi-channel ini adalah bagian dari strategi mengalihkan pertanyaan ke saluran biaya lebih rendah. Bagaimana Anda akan melakukannya?
Hanya buat webhook baru untuk menargetkan saluran itu! Sebuah webhook yang mengirim permintaan ke url yang sama https://todobot.eu.ngrok.io/create-hook yang kami gunakan untuk WhatsApp!
Ini akan berfungsi karena kode penangan selalu menggunakan conversationID dari payload webhook untuk menjawab pesan daripada channelID yang dikodekan secara hard. API Percakapan MessageBird secara otomatis akan menentukan saluran untuk percakapan untuk mengirim pesan Anda.
Apakah Anda ingin membangun bot Anda sendiri? Lihat kode lengkap di Github: Wabot di Github, minta akses awal ke WhatsApp dengan mengunjungi halaman WhatsApp dan mengklik tombol Kontak Penjualan untuk mengisi formulir. Selamat botting!



