質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

解決済

2回答

1648閲覧

【Swift+Alamofire】Slackのユーザーステータスの設定と取り消し【Slack API】

goki

総合スコア13

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

0クリップ

投稿2021/11/09 07:46

##前提
自作アプリにおいて、Slackのユーザーステータスを設定&設定されたステータスを取り消す機能を実装したいと考えております。

ユーザーのステータスを設定するためのメソッドをこちらの記事を参考に作成したのですが、うまく動きませんでした。
下記にそのメソッドコードとエラー内容を記載します。

Swift

1// ステータスを設定する処理 2static func setStatus(token: String) { 3 let headers: HTTPHeaders = [ 4 "Content-Type": "application/json; charset=utf-8", 5 "Authorization": "Bearer (token)" 6 ] 7 8 let parameters: Parameters = [ 9 "profile": [ 10 [ 11 "status_text": "ステータステスト", 12 "status_emoji": ":emoji:" 13 ] 14 ] 15 ] 16 17 AF.request("https://slack.com/api/users.profile.set", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers) 18 .responseString { response in 19 switch(response.result) { 20 case .success(let value): 21 print("Connection successed:(value)") 22 case .failure(let error): 23 print("Connection failed:(error)") 24 } 25 } 26 } 27} 28 29// => エラー内容 30// Slack接続エラー:responseSerializationFailed(reason: 31// Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength)

AF.requestの引数 > encodingをJSONEncoding.default から URLEncoding.defaultにしてみたところ、やはりうまくステータスは変更されませんでしたがログに表示される内容が下記のように変化しました。

After

1Slack接続成功:{"ok":false,"error":"invalid_json"}

invalid_jsonについて日本語、英語で調査しましたが、どのように修正すべきか結局判明しませんでした。

知りたいこと

  • 「前提」で記載したステータス設定のコードのどこを直すと正しく動作するかを教えていただきたいです。
  • APIにてステータスを設定するコードはSlackのドキュメントにも記載がありますが、現在設定されているステータスを取り消す方法が一向に見当たりません。情報をご存知でしたら教えていただけますと幸いです。

以上、稚拙な質問ではありますが、ご回答いただけますと幸いです!
よろしくお願いいたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

リクエストパラメータの構造を見たところ、JSONParameterEncoder を使用すればうまくいくのではないかと思います。

JSONParameterEncoder | Alamofire/Usage.md at master · Alamofire/Alamofire

ステータスを取り消す方法については、軽く探してみたのですが見つかりませんでした。 users.profile.set APIで新しい値を上書きするしか方法がないのかもしれませんね。

投稿2021/11/09 14:01

__k_san__

総合スコア177

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

goki

2021/11/10 00:51

ご回答ありがとうございます! そちら試してみたところ、下記のエラーが出てうまくいきませんでした。。 Protocol 'Any' as a type cannot conform to 'Encodable' が、よく見るとparametersのprofileの値が間違っていたため、そちらを直したところ現状のコードでうまく動作しました。。 お手数おかけしましたmm
goki

2021/11/10 00:57

また、ステータスを取り消す方法についてもご調査ありがとうございました!やはりそうですよね。。! 新しい値を上書きなどで対応いたしますね!
guest

0

自己解決

下記のSlackの公式ドキュメントをあらためて確認したところ、どうやらパラメータに指定したprofileの値が間違っていたようでした。。

SlackDoc

1{ 2 "ok": true, 3 "profile": { 4 "avatar_hash": "ge3b51ca72de", 5 "status_text": "Print is dead", 6 "status_emoji": ":books:", 7 "status_expiration": 0, 8 "real_name": "Egon Spengler", 9 "display_name": "spengler", 10 "real_name_normalized": "Egon Spengler", 11 "display_name_normalized": "spengler", 12 "email": "spengler@ghostbusters.example.com", 13 "image_24": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg", 14 "image_32": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg", 15 "image_48": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg", 16 "image_72": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg", 17 "image_192": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg", 18 "image_512": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg", 19 "team": "T012AB3C4" 20 } 21}

下記のパラメーターの値には、ブラケット[]が1セット余分で、Afterのように修正したところ、現状のコードで動作しました。

Before

1let parameters: Parameters = [ 2 "profile": [ 3 [ 4 "status_text": "ステータステスト", 5 "status_emoji": ":emoji:" 6 ] 7 ] 8]

After

1let parameters: Parameters = [ 2 "profile": [ 3 "status_text": "ステータステスト", 4 "status_emoji": ":emoji:" 5 ] 6]

稚拙なミスでお力をお借りして申し訳ございませんでした。。!

投稿2021/11/10 00:56

goki

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問