Cria um callback para assinar mensagens de canal.
Descrição da operação
Cria um callback para assinar mensagens de canal. Por exemplo, ao criar um callback, você pode configurar parâmetros como a URL de callback e os tipos de evento.
Limite de QPS
O limite de QPS por usuário único para esta operação é de 100 chamadas por segundo. Se o limite for excedido, as chamadas de API serão limitadas, o que pode afetar seus negócios. Chame esta operação adequadamente.
Experimente agora
Testar
Autorização RAM
|
Ação |
Nível de acesso |
Tipo de recurso |
Chave de condição |
Ação dependente |
|
live:CreateEventSub |
none |
*Rtc.
|
Nenhuma | Nenhuma |
Parâmetros da solicitação
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
Exemplo |
| AppId |
string |
Sim |
O ID do aplicativo a ser assinado. Você pode visualizar os IDs dos seus aplicativos navegando até ApsaraVideo Live > Live+ > ApsaraVideo Real-time Communication > Gerenciamento de Aplicativos. Se nenhum aplicativo existir, crie um clicando em [Criar Aplicativo]. |
9qb1**** |
| ChannelId |
string |
Não |
O ID do canal a ser assinado. Você pode chamar a operação ListEventSub para consultar os IDs dos canais assinados. Nota
|
123333 |
| Users |
array |
Não |
Os usuários cujas mensagens você deseja assinar. Se este parâmetro estiver vazio, todos os usuários no canal (incluindo streamers e espectadores) serão assinados. Formato: |
|
|
string |
Não |
O ID do usuário. |
user1 |
|
| Events |
array |
Sim |
Os eventos de assinatura. |
|
|
string |
Sim |
O evento de assinatura. Valores válidos:
|
ChannelEvent |
|
| CallbackUrl |
string |
Sim |
A URL de callback. Para o conteúdo do callback, consulte os exemplos de conteúdo de callback abaixo. |
http://****.com/callback |
Callback
O exemplo a seguir mostra o conteúdo que é retornado via callback para o usuário através da CallbackUrl especificada:
Request:
POST /callbackURL
Body
application/json
{
"MsgId": "Message ID",
"MsgTimestamp": 12312324, // Unix timestamp when the message is sent
"SubscribeID": "Subscription ID",
"AppId":"", // The AppId that generated this message
"ChannelID":"", // The channel that generated this message
"Contents": [
{
"Event": "UserEvent",// Subscription event: user event within a channel
"UserEvent": {
"UserId": "80331631628*****", // User ID
"EventTag": "Publish", // Event, including Join, Leave, Publish, Unpublish, Roleupdate
"SessionId": "0dr15rrnhkz0jnvz6o8sxo0*****", // The SessionID that generated this event
"Timestamp": 1609854786, // Unix timestamp when the event occurred
"Reason": 1, // Reason for joining or leaving. Only available for Join events.
"Role": 1, // Role type: streamer or viewer
"CurrentMedias":"1,2,3"// Stream type: the streams published by the user
}
},
{
"Event": "ChannelEvent",// Subscription event: channel event
"ChannelEvent": {
"ChannelId": "88888****",
"EventTag": "Open", // Channel event, including Open and Close
"Timestamp": 1609854530 // Unix timestamp when the event occurred
}
}
]
}
Response
HTTP STATUS 200
UserEvent
| Parâmetro | Tipo | Obrigatório | Descrição |
| UserId | string | Sim | O ID do usuário. |
| SessionId | string | Sim | O ID da sessão do usuário. |
| EventTag | string | Sim | O tipo de evento. Valores válidos: Join: entra no canal. Leave: sai do canal. PublishVideo: começa a publicar um fluxo de vídeo. PublishAudio: começa a publicar um fluxo de áudio. PublishScreen: começa o compartilhamento de tela. UnpublishVideo: para de publicar um fluxo de vídeo. UnpublishAudio: para de publicar um fluxo de áudio. UnpublishScreen: para o compartilhamento de tela. Roleupdate: altera a função. |
| Timestamp | number | Sim | O timestamp de quando o evento ocorreu. |
| Reason | integer | Sim | O motivo para entrar ou sair (disponível apenas para eventos Join). Valores válidos: 1: entrada ou saída normal. 2: entrada por reconexão (o usuário já existe no canal e entra novamente). 3: retransmissão entre canais. 4: saída por tempo limite. 5: o usuário inicia uma nova sessão e a sessão atual é forçada a ficar offline. 6: expulso. 7: canal encerrado. |
| Role | integer | Sim | O tipo de função. Valores válidos: 1: streamer. 2: espectador. |
| CurrentMedias | integer | Sim | O tipo de fluxo. Valores válidos: 1: áudio. 2: vídeo. 3: compartilhamento de tela. |
ChannelEvent
| Parâmetro | Tipo | Obrigatório | Descrição |
| EventTag | string | Sim | O tipo de evento. Valores válidos: Open: a reunião começa. Close: a reunião termina. |
| Timestamp | number | Sim | O timestamp de quando o evento ocorreu. |
Autenticação de callback
O recurso de autenticação de callback de eventos está ativado por padrão. A lógica de autenticação é a seguinte:
Quando o ApsaraVideo Live inicia uma solicitação de callback, o cabeçalho da solicitação HTTP(S) contém os campos Ali-Rtc-Timestamp e Ali-Rtc-Signature para que o servidor receptor de mensagens de callback realize a autenticação de assinatura. O valor Ali-Rtc-Timestamp é calculado da seguinte forma: Ali-Rtc-Signature=MD5SUM(MD5CONTENT), onde MD5CONTENT=Nome de domínio de callback|Valor Ali-Rtc-Timestamp|Chave de Autenticação. O nome de domínio de callback é o nome de domínio configurado na URL de callback, e a Chave de Autenticação é a AppKey gerada quando o AppId foi criado.
Quando o servidor receptor de mensagens de callback recebe uma mensagem de callback, ele concatena o nome de domínio de callback, o valor Ali-Rtc-Timestamp e a Chave de Autenticação, calcula o valor MD5 para obter uma string criptografada e, em seguida, compara a string criptografada calculada com o valor do campo Ali-Rtc-Signature no cabeçalho da solicitação HTTP(S) iniciado pelo ApsaraVideo Real-time Communication. Se não coincidirem, a solicitação é inválida.
Nova tentativa em caso de exceção de callback
Quando o Alibaba Cloud inicia uma solicitação de callback, o callback é considerado bem-sucedido somente quando seu servidor de negócios responde com o código de status HTTP 200. Se o callback falhar, o Alibaba Cloud tentará novamente 7 vezes em intervalos de 1 segundo, 2 segundos, 5 segundos, 10 segundos, 1 minuto, 2 minutos e 5 minutos. Cada nova tentativa gera um registro de callback correspondente.
Tratamento de exceções
Os clientes que entraram em um canal ou estão publicando fluxos mantêm um mecanismo de keep-alive de heartbeat com o servidor do Alibaba Cloud. Quando o keep-alive de heartbeat falha porque o cliente perde a conectividade de rede ou o aplicativo é fechado anormalmente (a falha é determinada se nenhum heartbeat for recebido do cliente por 90 segundos), o servidor determina que o cliente atingiu o tempo limite e saiu anormalmente, e gera callbacks de evento para o usuário parar a publicação de fluxo e sair do canal.
Elementos de resposta
|
Elemento |
Tipo |
Descrição |
Exemplo |
|
object |
Esquema da resposta. |
||
| RequestId |
string |
O ID da solicitação. |
760bad53276431c499e30dc36f6b**** |
| SubscribeId |
string |
O ID da assinatura criada. |
ad53276431c**** |
Exemplos
Resposta de sucesso
JSON formato
{
"RequestId": "760bad53276431c499e30dc36f6b****",
"SubscribeId": "ad53276431c****"
}
Códigos de erro
|
Código de status HTTP |
Código de erro |
Mensagem de erro |
Descrição |
|---|---|---|---|
| 400 | InputInvalid | %s. | Os parâmetros de entrada são inválidos. |
| 400 | QuotaLimitError | %s. | Cada AppId permite no máximo 20 assinaturas simultâneas, e apenas uma assinatura de canal completo é permitida. |
| 400 | ErrorInvalidCallBackUrl | %s. | O CallBackURL é inválido. Verifique o valor e tente novamente. |
| 500 | ServerError | %s. | Ocorreu um erro desconhecido. Tente novamente mais tarde ou abra um ticket. |
| 403 | NoAuth | %s. | Você não tem as permissões necessárias. |
| 404 | ResourceNotExist | %s. | O recurso solicitado não existe. Verifique a solicitação e tente novamente. |
Consulte Códigos de Erro para uma lista completa.
Notas de versão
Consulte Notas de Versão para uma lista completa.