Bagaimana cara memperbarui pesan respons ke perintah garis miring dengan API?

Konteks

Saya sedang membangun aplikasi Slack berdasarkan perintah garis miring, yang membuat pesan respons in_channel dengan tombol untuk berinteraksi dengan pengguna. Perintah garis miring digunakan di saluran pribadi.

Saat pengguna mengklik tombol, aplikasi saya dapat memperbarui pesan tersebut untuk mencerminkan status baru - cukup dengan membalas permintaan garis miring dengan pesan yang diperbarui dan dengan menyetel replace_original = true.

Masalah

Selain itu saya juga ingin memperbarui pesan itu secara bertahap, mis. ketika pengatur waktu telah habis. Saya telah mencoba memperbarui pesan dengan chat.update, tetapi saya mendapatkan kesalahan cant_update_message API .

Inilah permintaan yang saya gunakan untuk pengujian di Tukang Pos:

https://slack.com/api/chat.update?token={TOKEN}&channel={CHANNEL}&ts={TS}&text=Updated&as_user=true

Namun, menurut dokumentasi saya seharusnya dapat memperbarui pesan bot:

Jenis pesan yang valid

Hanya pesan yang diposting oleh pengguna terotentikasi yang dapat diperbarui menggunakan metode ini. Ini mencakup pesan obrolan biasa, serta pesan yang berisi subtipe me_message. Pengguna bot juga dapat memperbarui pesan yang mereka posting.

Dan pesan yang ingin saya perbarui jelas milik aplikasi slack saya dan terlihat seperti pesan bot biasa. Berikut tampilan pesan tersebut melalui conversations.history:

{
    "text": "Some text...",
    "bot_id": "Bxxxxxxxx",            
    "type": "message",
    "subtype": "bot_message",
    "ts": "{TS}"
}

Omong-omong. Saya menghapus pesan itu menggunakan parameter yang sama melalui chat.delete berfungsi.

Apa yang saya lewatkan?


person Erik Kalkoken    schedule 11.09.2018    source sumber


Jawaban (1)


Saya berbicara dengan dukungan Slack tentang pertanyaan saya dan mereka mengonfirmasi bahwa tidak mungkin memperbarui pesan tanggapan melalui chat.update.

Berikut tanggapan lengkapnya:

Respons perintah garis miring in_channel tidak dapat diperbarui oleh pengguna. Karena respons perintah garis miring tidak menggunakan API web dan oleh karena itu tidak terkait dengan token tertentu, panggilan chat.update tidak mungkin menentukan apakah panggilan tersebut diizinkan untuk memperbarui pesan atau tidak. Oleh karena itu kesalahannya.

Saran saya adalah mengirimkan respons perintah garis miring singkat atau respons perintah garis miring kosong dan kemudian menggunakan metode chat.postMessage API untuk mengirim pesan "dalam saluran", yang nanti dapat diperbarui menggunakan metode API chat.update.

Seperti yang disarankan, saya sekarang akan membuat pesan "dalam game" melalui metode chat.postMessage API, yang memungkinkan saya memperbaruinya nanti. Namun hal ini menimbulkan masalah akses untuk saluran pribadi. Untuk menguranginya, saya sekarang akan meminta pengguna untuk menambahkan pengguna bot saya ke semua saluran pribadi, yang akan memberikan akses aplikasi saya ke saluran tersebut.

Saya ingin menghindari pendekatan ini sejak awal, karena ini menciptakan langkah ekstra bagi pengguna, tetapi sepertinya tidak ada alternatif yang lebih baik (btw. aplikasi github menggunakan pendekatan yang sama).

person Erik Kalkoken    schedule 12.09.2018