0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

f17: twist api で 新規スレッド投稿

Last updated at Posted at 2024-01-25

.

ビジネス向けコミュニケーションツール
「typetalk」 を利用して

メール受信をトリガーに api 経由で、
「typetalk」 の トピック (チャンネル) へメッセージ送信

ということを行っていたのですが、
2025年12月1日 に サービスを終了する
ということになったそうで、
代替策として 「twist」 の api を試してみました

その設定メモです

こちらの方が、
twist api を用いた記事を書いております
(golang + outgoing ですね)

TwistのchatbotをGoで作ってみた
https://qiita.com/usk81/items/bfd15ec3c5ecc23d0b8f

今回は、python + incoming による
「twist」 のスレッドへの新規投稿 を試してみました


[ 00. メニュー ]

01.キッチン
02.仕込み (api token の発行)
03.味見 (python で実行)
04.デザート


[ 01. キッチン ]

 ・ インターネットがつながっている python 実行環境
  -> windows 10 + Python 3.8.1

 ・ Twist の ID 登録
  https://twist.com/login?lang=ja


[ 02. 仕込み (api token の発行) ]

twist に web でログイン後、
Integration Management
https://twist.com/app_console
へ遷移します

twist05.jpg

twist07.jpg

「create a new app」 ボタン押下し、
「Create Integration」 ページにて
・Integration type: General integration
・Integration name: (例: test-hook)
を設定し 「Create integration」 ボタン押下にて、
api token が発行されます

twist08.jpg

twist09.jpg

※ 使用する token は 「OAuth 2 test token」 です

※ 最初何も考えず 「verification token」 を使用して
invalid token が返ってきて、ハマってしまいました

「OAuth 2 test token」 の下の
説明にもありますが、この token は
お手軽に様々なスコープにアクセスできますのでお試しに便利です

しっかりと運用する場合は、Client ID / Client secret などを
使用して OAuth2 したほうがよさそうです

api token 発行後、上部の Home のリンクで戻ると、
作成された integration [ 例: test-hook ] が表示されます

twist11.jpg


[ 03. 味見 (python で実行) ]

twist のリファレンスにある curl サンプルを基に
python requests に書き換えます

Add thread
https://developer.twist.com/v3/#add-thread

curl -X POST https://api.twist.com/api/v3/threads/add \
  -H "Authorization: Bearer 0123456789abcdef0123456789abcdef01234567" \
  -d channel_id=6984 \
  -d recipients=[10000, 10001] \
  -d title=Thread1

 ・チャンネル ID (channel_id) は、チャンネルページの URL にあります
 https://twist.com/a/987654/ch/123456/
 -> ID:123456

 ・受信者 (recipients) は、色々設定できますが、EVERYONE にすると
 チャンネルのすべてのメンバーに通知されます

add_thread.py

# -*- coding: utf-8 -*-

import requests

# =============================

def new_thread(url2, token2, channel2, recipient2, title2, comment2):

	heads = {
	    'Authorization': 'Bearer ' + token2,
	    'Content-Type': 'application/x-www-form-urlencoded',
	}

	datas = {
	    'channel_id': channel2,
	    'recipients': recipient2,
	    'title': title2,
	    'content': comment2,
	}

	req = requests.post(url2, headers=heads, data=datas)

	# raise_for_status や try/except キャッチなどはお好みで
	if req.status_code == 200:
		print('to post is ok !')
	else:
		print(f'to post is NG')
		print(f'status code: {req.status_code}, responses: {req.text}')

# =============================

if __name__ == '__main__':

	url1 = 'https://api.twist.com/api/v3/threads/add'
	token1 = 'oauth2:abcdefghijklmnopqrstuvwxyz'
	channel1 = '123456'
	recipient1 = 'EVERYONE'
	title1 = 'テスト壱'

	comment1 = 'twist の スレッドへ' + '\n' \
	+ '新規投稿を行います‎'

	new_thread(url1, token1, channel1, recipient1, title1, comment1)

# ==============================

これで、twist の スレッド へ新規投稿され、
twist web, twist アプリ などで確認ができます

twist12.jpg


[ 04. デザート ]

ちなみに、新規スレッド投稿 ではなく、
すでに存在しているスレッド内へのコメント投稿 のサンプルはこちらです

Add comment
https://developer.twist.com/v3/#add-comment

curl -X POST https://api.twist.com/api/v3/comments/add \
  -H "Authorization: Bearer 0123456789abcdef0123456789abcdef01234567" \
  -d thread_id=32038 \
  -d recipients=[10000, 10001] \
  -d content="OK!"

スレッド ID (thread_id) も URL から
https://twist.com/a/987654/ch/123456/t/223322/
-> ID:223322
となり、新規投稿 と同じような感じで
python でも スレッド内投稿できます

twist のスレッドは、シンプルで分かりやすくていいですね


.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?