私は現在、SendBird SDK を使用しようとしていますが、この関数を呼び出そうとすると、エラーが返されます。以下は、ドキュメントで提供されている方法です。
channel.sendUserMessage(message, data, customType, function(message, error){
if (error) {
console.error(error);
return;
}
console.log(message);
});
これが私が使用するものです:
channelList[i].sendUserMessage(message, function (message, error) {
if (error) {
console.error(error);
return;
}
console.log(message);
document.getElementById(url + "ChatInput").value = "";
});
返されるエラーは次のとおりです。
I {name: "SendBirdException", code: 900025, message: "Message is blocked due to invalid type of 'mentioned_user_ids'"}
code: 900025
message: "Message is blocked due to invalid type of 'mentioned_user_ids'"
name: "SendBirdException"
今、私は文字列をアップロードしているだけで、最初は本当に混乱していましたが、その理由がわかりました。私は SendBird SDK が Typescript を使用し、このファイルに基づいてさまざまなパラメーターに複数のオーバーロードを使用していると信じています。
https://github.com/smilefam/SendBird-SDK-JavaScript/blob/master/SendBird.d.ts
特にそのファイルのこの部分:
sendUserMessage(userMessageParams: UserMessageParams, callback: messageCallback): UserMessage;
sendUserMessage(message: string, callback: messageCallback): UserMessage;
sendUserMessage(message: string, data: string, callback: messageCallback): UserMessage; // DEPRECATED
sendUserMessage(message: string, data: string, customType: string, callback: messageCallback): UserMessage; // DEPRECATED
sendUserMessage(
message: string,
data: string,
customType: string,
targetLanguages: Array<string>,
callback: messageCallback
): UserMessage;
私は Typescript を使用していないので、次で構成される userMessageParams を使用するそのリストの最初の関数にデフォルト設定されていると思います。
interface UserMessageParams {
message: string;
data: string;
customType: string;
targetLanguages: Array<string>;
mentionType: 'users' | 'channel';
mentionedUserIds: Array<string>;
mentionedUsers: Array<User>;
pushNotificationDeliveryOption: 'default' | 'suppress';
}
これには、以前にエラーで言及されていたプロパティが「言及された_user_ids」として含まれています。
私の質問は、文字列とコールバック関数だけの単純なオーバーロードにデフォルト設定できるかどうかです:
sendUserMessage(message: string, callback: messageCallback): UserMessage;
それ以外の:
sendUserMessage(userMessageParams: UserMessageParams, callback: messageCallback): UserMessage;
タイプスクリプトを使用せずに。
私が試したこと
次のようにして、オブジェクトを自分で作成しようとしました。
var userMessageParams = new sb.UserMessageParams();
userMessageParams.message = message;
userMessageParams.mentionType = "channel";
channelList[i].sendUserMessage(userMessageParams, function (message, error) {
if (error) {
console.error(error);
return;
}
console.log(message);
document.getElementById(url + "ChatInput").value = "";
});
しかし、それでも上記と同じエラーが発生します。
null_data:null
_mentionType:"channel"
_mentionedIds:["d155d9e51f3e4897988e39a8f33c89a6"]
_mentionedUserIds:["d155d9e51f3e4897988e39a8f33c89a6"]
_mentionedUsers:[]
_message:"message"
_pushNotificationDeliveryOption:null
_targetLanguages:null
userMessageParams 内のプロパティの値を手動で設定します。
userMessageParams.mentionedUserIds = [ channelList[0].members[1].userId, channelList[0].members[0].userId];
_customType:null
_data:null
_mentionType:"channel"
_mentionedIds:["d155d9e51f3e4897988e39a8f33c89a6"]
_mentionedUserIds:["d155d9e51f3e4897988e39a8f33c89a6"]
_mentionedUsers:[]
_message:"message"
_pushNotificationDeliveryOption:null
_targetLanguages:null
//Inside console in Chrome
channelList[0].members[1].userId
"d155d9e51f3e4897988e39a8f33c89a6"
channelList[0].members[0].userId
"1924c64299284da6b8e6366a7f0b7a7c"
(userIds内にそれらの1つだけを追加した理由はわかりません。追加する前後にコンソールに両方の値があることを確認しました。バックグラウンドのsenderIdと同じ場合、またはそれが私が持っている最良の推測)そして、私はまだ同じエラーが発生します。
特定のユーザーについては言及しません。これは 1 対 1 のチャットにのみ使用されるため、実際には必要ないからです。
ソリューション
私が今見ている2つの可能な解決策は次のとおりです。
- 誰がデフォルトで文字列オーバーロードを使用しているのかを把握します (私は Typescript を使用したことがなく、どのように Java スクリプトにトランスコンパイルされたのかわからないので、それが可能かどうかはわかりません)。
- userMessageParams を作成する際にどこを台無しにしているかを突き止めてください。そこでは、ユーザーについて言及したくありません。
エッセイで申し訳ありませんが、誰かが私を助けるために役立つ、またはより明確にする必要がある情報を持っている場合は、何でも大歓迎です、ありがとう!
トランスコンパイルされたコード
...誰かがこれを見るのに夢中になっている場合 (または私がそれだと思うもの)、SendBird.min.js にあります):
this.sendUserMessage = function(e, n, t, r, i) {
var a = this
, s = le.MentionType.USERS
, o = []
, l = ue.PushNotificationDeliveryOption.DEFAULT;
if ("function" == typeof n && (i = n,
n = "",
t = "",
r = [],
e instanceof ue)) {
var u = e;
e = u.message,
n = u.data,
t = u.customType,
r = u.targetLanguages,
s = u._mentionType,
o = u._mentionedIds,
l = u.pushNotificationDeliveryOption ? u.pushNotificationDeliveryOption : ue.PushNotificationDeliveryOption.DEFAULT
}
if ("function" == typeof t && (i = t,
t = "",
r = []),
"function" == typeof r && (i = r,
r = []),
r || (r = []),
"string" == typeof r && (r = [r]),
null === n && (n = ""),
null === t && (t = ""),
"string" != typeof e || "string" != typeof n || "string" != typeof t || !Array.isArray(r) || [ue.PushNotificationDeliveryOption.DEFAULT, ue.PushNotificationDeliveryOption.SUPPRESS].indexOf(l) < 0)
return void U(null, new I("Invalid parameter.",C.INVALID_PARAMETER), i);
var c = null;
if (!he.getInstance() || !he.getInstance().currentUser)
return i && U(null, new I("Connection should be made first.",C.CONNECTION_REQUIRED), i),
c;
var d = q.bMessage(this.url, e, n, t, s, o, r, l)
, h = M.build(d.requestId, 0, he.getInstance().currentUser, this, e, n, t, r, (new Date).getTime(), null, s, null, o);
return c = new M(h),
he.getInstance().sendCommand(d, function(e, n) {
if (n)
return void U(null, new I(n.message,n.code), i);
var t = new M(e.getJsonElement())
, r = he.getInstance().currentUser;
r && t._sender && r.userId === t._sender.userId && (r.nickname !== t._sender.nickname && (r.nickname = t._sender.nickname),
r.profileUrl !== t._sender.profileUrl && (r.profileUrl = t._sender.profileUrl)),
a.isGroupChannel() && F.getChannel(a.url, function(e, n) {
if (R) {
var r = e;
e = n,
n = r
}
if (n)
return void U(null, n, i);
e.lastMessage = t;
for (var a in he.getInstance().channelHandlers) {
he.getInstance().channelHandlers[a].onChannelChanged(e)
}
}),
U(t, null, i)
}),
c
}