Pular para o conteúdo
Skillpedia
APIs e servidores (backend)48 mil · #2389

azure-web-pubsub-ts

Capacita seu agente a enviar mensagens em tempo real usando WebSockets. Ele suporta padrões de publicação/assinatura para comunicação instantânea.

O que ela faz

Permite que diferentes aplicativos troquem mensagens em tempo real, como em um chat. Ele usa conexões WebSocket para enviar e receber mensagens instantaneamente.

Quando usar

  • ✓Criar um chat em grupo.
  • ✓Enviar notificações instantâneas para usuários.
  • ✓Sincronizar dados entre vários usuários simultaneamente.

Exemplo do que pedir para a IA

“Como faço para enviar uma mensagem para todos em um chat?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/azure-web-pubsub-ts/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/azure-web-pubsub-ts/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele funciona estabelecendo conexões diretas entre os usuários (ou entre um usuário e um servidor). As mensagens são enviadas através dessas conexões, garantindo que cheguem rapidamente.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add sickn33/agentic-awesome-skills --skill azure-web-pubsub-ts

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/azure-web-pubsub-ts/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

SDKs do Azure Web PubSub para TypeScript

Mensagens em tempo real com conexões WebSocket e padrões de publicação/assinatura.

Instalação

# Server-side management
npm install @azure/web-pubsub @azure/identity

# Client-side real-time messaging
npm install @azure/web-pubsub-client

# Express middleware for event handlers
npm install @azure/web-pubsub-express

Variáveis de Ambiente

WEBPUBSUB_CONNECTION_STRING=Endpoint=https://<resource>.webpubsub.azure.com;AccessKey=<key>;Version=1.0;
WEBPUBSUB_ENDPOINT=https://<resource>.webpubsub.azure.com

Lado do Servidor: WebPubSubServiceClient

Autenticação

import { WebPubSubServiceClient, AzureKeyCredential } from "@azure/web-pubsub";
import { DefaultAzureCredential } from "@azure/identity";

// Connection string
const client = new WebPubSubServiceClient(
  process.env.WEBPUBSUB_CONNECTION_STRING!,
  "chat"  // hub name
);

// DefaultAzureCredential (recommended)
const client2 = new WebPubSubServiceClient(
  process.env.WEBPUBSUB_ENDPOINT!,
  new DefaultAzureCredential(),
  "chat"
);

// AzureKeyCredential
const client3 = new WebPubSubServiceClient(
  process.env.WEBPUBSUB_ENDPOINT!,
  new AzureKeyCredential("<access-key>"),
  "chat"
);

Gerar Token de Acesso do Cliente

// Basic token
const token = await client.getClientAccessToken();
console.log(token.url);  // wss://...?access_token=...

// Token with user ID
const userToken = await client.getClientAccessToken({
  userId: "user123",
});

// Token with permissions
const permToken = await client.getClientAccessToken({
  userId: "user123",
  roles: [
    "webpubsub.joinLeaveGroup",
    "webpubsub.sendToGroup",
    "webpubsub.sendToGroup.chat-room",  // specific group
  ],
  groups: ["chat-room"],  // auto-join on connect
  expirationTimeInMinutes: 60,
});

Enviar Mensagens

// Broadcast to all connections in hub
await client.sendToAll({ message: "Hello everyone!" });
await client.sendToAll("Plain text", { contentType: "text/plain" });

// Send to specific user (all their connections)
await client.sendToUser("user123", { message: "Hello!" });

// Send to specific connection
await client.sendToConnection("connectionId", { data: "Direct message" });

// Send with filter (OData syntax)
await client.sendToAll({ message: "Filtered" }, {
  filter: "userId ne 'admin'",
});

Gerenciamento de Grupos

const group = client.group("chat-room");

// Add user/connection to group
await group.addUser("user123");
await group.addConnection("connectionId");

// Remove from group
await group.removeUser("user123");

// Send to group
await group.sendToAll({ message: "Group message" });

// Close all connections in group
await group.closeAllConnections({ reason: "Maintenance" });

Gerenciamento de Conexões

// Check existence
const userExists = await client.userExists("user123");
const connExists = await client.connectionExists("connectionId");

// Close connections
await client.closeConnection("connectionId", { reason: "Kicked" });
await client.closeUserConnections("user123");
await client.closeAllConnections();

// Permissions
await client.grantPermission("connectionId", "sendToGroup", { targetName: "chat" });
await client.revokePermission("connectionId", "sendToGroup", { targetName: "chat" });

Lado do Cliente: WebPubSubClient

Conectar

import { WebPubSubClient } from "@azure/web-pubsub-client";

// Direct URL
const client = new WebPubSubClient("<client-access-url>");

// Dynamic URL from negotiate endpoint
const client2 = new WebPubSubClient({
  getClientAccessUrl: async () => {
    const response = await fetch("/negotiate");
    const { url } = await response.json();
    return url;
  },
});

// Register handlers BEFORE starting
client.on("connected", (e) => {
  console.log(`Connected: ${e.connectionId}`);
});

client.on("group-message", (e) => {
  console.log(`${e.message.group}: ${e.message.data}`);
});

await client.start();

Enviar Mensagens

// Junte-se a um grupo primeiro
await client.joinGroup("chat-room");

// Enviar para o grupo
await client.sendToGroup("chat-room", "Olá!", "text");
await client.sendToGroup("chat-room", { type: "message", content: "Oi" }, "json");

// Opções de envio
await client.sendToGroup("chat-room", "Olá", "text", {
  noEcho: true,        // Não ecoar de volta para o remetente
  fireAndForget: true, // Não espere pela confirmação
});

// Enviar evento para o servidor

…
Perguntas frequentes

O que é um 'hub'?

Um hub é como um canal ou sala de chat onde as mensagens são enviadas e recebidas.

O que são 'conexões WebSocket'?

São conexões de internet persistentes que permitem a troca de dados em tempo real entre o cliente (seu navegador) e o servidor.

Posso enviar mensagens apenas para um usuário específico?

Sim, é possível enviar mensagens diretamente para um usuário específico, sem que outros as vejam.

Detalhes

Descrição original do autor

Real-time messaging with WebSocket connections and pub/sub patterns.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#2389
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas