Nota do autor: Análise profunda do erro cameo_permission_denied no Sora 2, incluindo os 4 tipos de configurações de permissão, métodos de verificação de existência do personagem, boas práticas de chamada de API e estratégias de tolerância a falhas em ambiente de produção.
Ao utilizar a função de personagens (Cameo) na API do Sora 2, desenvolvedores encontram frequentemente o erro 「cameo_permission_denied」. A mensagem completa é: {"error":{"code":"cameo_permission_denied","message":"You are not allowed to access one or more mentioned cameos.","param":null,"type":"invalid_request_error"}}. A causa raiz deste erro são as restrições de configuração de permissão do personagem ou o fato de o personagem ter sido excluído ou desativado, e não um problema no seu código.
Valor central: Ao ler este artigo, você entenderá os 4 mecanismos de configuração de permissão de personagens do Sora 2, dominará o método de verificação de existência via URL de Perfil, aprenderá a lógica de pré-verificação antes da chamada da API e construirá estratégias de tolerância a falhas de nível de produção.

Pontos-chave do erro de permissão de personagem no Sora 2
| Ponto | Descrição | Impacto |
|---|---|---|
| 4 Níveis de Permissão | Apenas eu / Pessoas que aprovar / Seguidores Mútuos / Todos | Define quem pode usar o personagem nos vídeos |
| Validação via URL de Perfil | Verificar status via sora.chatgpt.com/profile/{handle} |
Determina se o personagem existe ou foi deletado |
| Revogação Dinâmica | O criador pode alterar permissões ou desativar o personagem a qualquer momento | Chamadas de API podem falhar subitamente |
| Limpeza em 30 Dias | Personagens deletados são removidos em 30 dias | Perfil retorna "Failed to load profile" |
| Sem Interface de Pré-verificação | A API do Sora não oferece endpoint de consulta de permissão | É necessário disparar a requisição para identificar o erro |
Detalhes das Permissões de Personagem no Sora 2
O que é um Cameo (Personagem)?
A função Cameo do Sora 2 permite que os usuários criem personagens digitais através da gravação de vídeos curtos, os quais podem ser referenciados em gerações de vídeo subsequentes. Cada personagem possui um Handle (nome de usuário) único e um Character ID, por exemplo:
- Handle:
@vee.papi - URL do Perfil:
https://sora.chatgpt.com/profile/vee.papi - Character ID:
25d56f016.meridian(identificador interno do sistema)
Por que ocorre o erro permission_denied?
De acordo com a documentação oficial da OpenAI e o feedback da comunidade de desenvolvedores, este erro ocorre pelos seguintes motivos:
- Restrição de Configuração: O criador definiu como "Apenas eu" ou "Pessoas que aprovar", e sua conta não está na lista permitida.
- Personagem Deletado: O criador excluiu o personagem, e o sistema retorna erro de permissão em vez de "não encontrado".
- Personagem Desativado: O criador desativou (Deactivate) o personagem intencionalmente, tornando-o indisponível para todos.
- Erro de Digitação no Handle: O Handle referenciado não existe ou está escrito errado.
- Problemas na Conta: Sua conta Sora possui restrições de acesso a certos personagens (raro).
Os 4 Níveis de Permissão de Personagem
| Nível de Permissão | Descrição | Impacto na Chamada da API |
|---|---|---|
| Only me (Apenas eu) | Disponível apenas para o criador | Chamadas de outros usuários retornam permission_denied |
| People I approve | Usuários específicos aprovados manualmente | Usuários não aprovados recebem permission_denied |
| Mutuals (Seguidores Mútuos) | Criador segue você + você segue o criador | Usuários sem seguimento mútuo recebem permission_denied |
| Everyone (Todos) | Disponível para todos os usuários do Sora | Teoricamente não deve haver erro de permissão (salvo exclusão) |

Verificando a existência do personagem via Profile URL
Formato da URL do perfil
A página de perfil dos personagens do Sora segue o seguinte formato de URL:
https://sora.chatgpt.com/profile/{handle}
Exemplos:
https://sora.chatgpt.com/profile/vee.papihttps://sora.chatgpt.com/profile/25d56f016.meridian
Lógica de verificação
Ao fazer uma requisição para a URL do perfil, é possível determinar o status do personagem:
| Resposta HTTP | Conteúdo da página | Status do personagem | Resultado esperado da chamada de API |
|---|---|---|---|
| 200 OK | Exibe informações do personagem e vídeos | Personagem existe e é visível publicamente | Depende das configurações de permissão |
| 200 OK | "Failed to load profile. Please try again." | Personagem excluído ou Handle inexistente | Sempre retorna permission_denied |
| 403 Forbidden | Sem permissão de acesso | Personagem existe, mas a permissão é "Only me" | Sempre retorna permission_denied |
| 404 Not Found | Handle inexistente | Personagem nunca foi criado | Sempre retorna permission_denied |
Observação importante: Mesmo que um personagem tenha sido excluído, o Sora ainda pode retornar um código de status 200, mas a página exibirá "Failed to load profile". Isso indica que o sistema mantém o marcador (placeholder) do Handle, mas os dados do personagem foram limpos.
Implementação em Python: Verificação de existência do personagem
Aqui está a implementação completa para verificar se um personagem existe via Profile URL:
import requests
from typing import Dict, Optional
def check_character_availability(handle: str) -> Dict[str, any]:
"""
Verifica se o personagem Sora está disponível
Args:
handle: O Handle do personagem (com ou sem o prefixo @)
Returns:
{
"exists": bool, # Se o personagem existe
"accessible": bool, # Se é acessível (não significa necessariamente que pode ser usado na API)
"status": str, # "available" / "deleted" / "not_found" / "unknown"
"profile_url": str
}
"""
# Limpa o Handle (remove o prefixo @)
handle = handle.lstrip("@")
profile_url = f"https://sora.chatgpt.com/profile/{handle}"
try:
response = requests.get(profile_url, timeout=10)
# Verifica o conteúdo da página
content = response.text.lower()
if response.status_code == 200:
if "failed to load profile" in content:
return {
"exists": False,
"accessible": False,
"status": "deleted",
"profile_url": profile_url,
"message": "Personagem excluído ou Handle inexistente"
}
else:
return {
"exists": True,
"accessible": True,
"status": "available",
"profile_url": profile_url,
"message": "Personagem existe e o Perfil é acessível (mas a chamada de API depende das permissões)"
}
elif response.status_code == 403:
return {
"exists": True,
"accessible": False,
"status": "restricted",
"profile_url": profile_url,
"message": "Personagem existe, mas as permissões estão como privadas"
}
elif response.status_code == 404:
return {
"exists": False,
"accessible": False,
"status": "not_found",
"profile_url": profile_url,
"message": "Handle inexistente"
}
else:
return {
"exists": None,
"accessible": None,
"status": "unknown",
"profile_url": profile_url,
"message": f"Código de status desconhecido: {response.status_code}"
}
except requests.RequestException as e:
return {
"exists": None,
"accessible": None,
"status": "error",
"profile_url": profile_url,
"message": f"Falha na requisição: {str(e)}"
}
# Exemplo de uso
result = check_character_availability("vee.papi")
print(f"Status do personagem: {result['status']}")
print(f"Mensagem: {result['message']}")
if result["exists"]:
print("✅ O personagem existe, você pode tentar a chamada de API")
else:
print("❌ Personagem inexistente ou excluído, a chamada de API certamente falhará")
Ver o código completo pronto para produção
import requests
import time
from typing import Dict, List, Optional
from openai import OpenAI
class SoraCharacterValidator:
"""
Validador de Personagens Sora
Suporta verificação em lote, cache e pré-verificação antes da chamada de API
"""
def __init__(self, cache_ttl: int = 3600):
"""
Args:
cache_ttl: Validade do cache (segundos), padrão de 1 hora
"""
self.cache = {}
self.cache_ttl = cache_ttl
def check_character(self, handle: str, use_cache: bool = True) -> Dict:
"""Verifica um único personagem (com suporte a cache)"""
handle = handle.lstrip("@")
# Verifica o cache
if use_cache and handle in self.cache:
cached_result, timestamp = self.cache[handle]
if time.time() - timestamp < self.cache_ttl:
return cached_result
# Executa a verificação
profile_url = f"https://sora.chatgpt.com/profile/{handle}"
try:
response = requests.get(profile_url, timeout=10)
content = response.text.lower()
if response.status_code == 200:
if "failed to load profile" in content:
result = {
"exists": False,
"accessible": False,
"status": "deleted",
"message": "Personagem excluído"
}
else:
result = {
"exists": True,
"accessible": True,
"status": "available",
"message": "Personagem disponível"
}
elif response.status_code == 403:
result = {
"exists": True,
"accessible": False,
"status": "restricted",
"message": "Personagem privado"
}
else:
result = {
"exists": False,
"accessible": False,
"status": "not_found",
"message": "Handle inexistente"
}
except Exception as e:
result = {
"exists": None,
"accessible": None,
"status": "error",
"message": str(e)
}
# Atualiza o cache
self.cache[handle] = (result, time.time())
return result
def batch_check(self, handles: List[str]) -> Dict[str, Dict]:
"""Verificação de personagens em lote"""
results = {}
for handle in handles:
handle = handle.lstrip("@")
results[handle] = self.check_character(handle)
time.sleep(0.5) # Evita requisições muito rápidas
return results
def validate_before_api_call(
self,
client: OpenAI,
prompt: str,
characters: List[str]
) -> Dict:
"""
Validação antes da chamada de API
Args:
client: Cliente OpenAI
prompt: Comando (Prompt) de geração de vídeo
characters: Lista de Handles dos personagens a serem usados
Returns:
{
"safe_to_call": bool,
"invalid_characters": List[str],
"warnings": List[str]
}
"""
invalid_characters = []
warnings = []
for handle in characters:
result = self.check_character(handle)
if not result["exists"]:
invalid_characters.append(handle)
warnings.append(f"⚠️ {handle}: {result['message']}")
elif not result["accessible"]:
warnings.append(f"⚠️ {handle}: Pode falhar na chamada de API devido às configurações de permissão")
return {
"safe_to_call": len(invalid_characters) == 0,
"invalid_characters": invalid_characters,
"warnings": warnings
}
# Exemplo de uso
validator = SoraCharacterValidator()
# Verificação em lote
handles = ["vee.papi", "25d56f016.meridian", "nonexistent.user"]
results = validator.batch_check(handles)
for handle, result in results.items():
print(f"{handle}: {result['status']} - {result['message']}")
# Validação antes da chamada de API
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://vip.apiyi.com/v1")
validation = validator.validate_before_api_call(
client=client,
prompt="A character walking in a park",
characters=["vee.papi", "25d56f016.meridian"]
)
if validation["safe_to_call"]:
print("✅ Todos os personagens validados, a API pode ser chamada com segurança")
else:
print(f"❌ Personagens inválidos encontrados: {validation['invalid_characters']}")
for warning in validation["warnings"]:
print(warning)
Dica técnica: Em ambientes de produção, recomendamos realizar as chamadas da API do Sora através da plataforma APIYI (apiyi.com). Ela verifica automaticamente a disponibilidade do personagem antes da chamada, oferece logs de erro detalhados e estratégias de fallback, evitando falhas em massa devido a problemas de permissão do personagem.
Melhores práticas para chamadas da API do Sora 2
Prática 1: Validar o personagem antes da chamada
Antes da chamada real da API, faça uma pré-verificação do status do personagem via Profile URL:
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://vip.apiyi.com/v1"
)
def safe_generate_with_character(prompt: str, character_handle: str):
"""
Geração segura com validação de personagem
"""
# Passo 1: Validar personagem
validator = SoraCharacterValidator()
check_result = validator.check_character(character_handle)
if not check_result["exists"]:
raise ValueError(f"❌ O personagem {character_handle} não existe ou foi excluído, interrompendo a chamada")
if check_result["status"] == "restricted":
print(f"⚠️ Aviso: O personagem {character_handle} pode causar falha na chamada devido às permissões")
# Passo 2: Chamar a API
try:
response = client.videos.generate(
model="sora-2-1080p",
prompt=f"{prompt} @{character_handle}",
timeout=120
)
return response
except Exception as e:
error_msg = str(e)
if "cameo_permission_denied" in error_msg:
print(f"❌ Erro de permissão: Você não tem permissão para acessar o personagem @{character_handle}")
print(f" Possível causa: A permissão do personagem está definida como 'Only me' ou 'People I approve'")
else:
print(f"❌ Outro erro: {error_msg}")
raise e
# Exemplo de uso
try:
result = safe_generate_with_character(
prompt="A character dancing in the rain",
character_handle="vee.papi"
)
print("✅ Gerado com sucesso")
except ValueError as e:
print(f"Falha na pré-verificação: {e}")
except Exception as e:
print(f"Falha na chamada de API: {e}")
Prática 2: Lidando elegantemente com erros de permission_denied
Ao encontrar o erro cameo_permission_denied, ofereça mensagens amigáveis e uma solução de fallback:
def generate_with_fallback(prompt: str, character_handle: str):
"""
Geração com estratégia de fallback
Remove a referência ao personagem e continua a geração em caso de falha
"""
try:
# Tentando usar o personagem
response = client.videos.generate(
model="sora-2-1080p",
prompt=f"{prompt} @{character_handle}",
timeout=120
)
return {
"success": True,
"used_character": True,
"data": response
}
except Exception as e:
error_msg = str(e)
if "cameo_permission_denied" in error_msg:
print(f"⚠️ Não foi possível usar o personagem @{character_handle}, tentando remover a referência")
# Fallback: Removendo a referência ao personagem, gerando apenas com o comando original
try:
response = client.videos.generate(
model="sora-2-1080p",
prompt=prompt, # Sem a referência ao personagem
timeout=120
)
return {
"success": True,
"used_character": False,
"fallback": True,
"data": response
}
except Exception as fallback_error:
return {
"success": False,
"error": str(fallback_error)
}
else:
return {
"success": False,
"error": error_msg
}
# Exemplo de uso
result = generate_with_fallback(
prompt="A person walking on the beach at sunset",
character_handle="vee.papi"
)
if result["success"]:
if result.get("used_character"):
print("✅ Gerado com sucesso usando o personagem")
else:
print("⚠️ Fallback para geração sem personagem concluído")
else:
print(f"❌ Falha na geração: {result['error']}")
Prática 3: Estratégia de tolerância a falhas em chamadas em lote
Em cenários de geração em lote, a falha de um único personagem não deve interromper toda a tarefa:
from typing import List, Dict
def batch_generate_with_characters(
prompts: List[str],
character_handles: List[str]
) -> List[Dict]:
"""
Geração em lote (com tolerância a falhas de personagem)
Args:
prompts: Lista de comandos (prompts)
character_handles: Handle do personagem correspondente a cada comando
Returns:
Lista de resultados
"""
results = []
validator = SoraCharacterValidator()
for i, (prompt, handle) in enumerate(zip(prompts, character_handles)):
print(f"\nProcessando tarefa {i+1}/{len(prompts)}: @{handle}")
# Pré-verificação do personagem
check_result = validator.check_character(handle)
if not check_result["exists"]:
print(f"⚠️ Pulando: O personagem @{handle} não existe")
results.append({
"index": i,
"success": False,
"reason": "character_not_found"
})
continue
# Tentando gerar
try:
response = client.videos.generate(
model="sora-2-1080p",
prompt=f"{prompt} @{handle}",
timeout=120
)
results.append({
"index": i,
"success": True,
"data": response
})
print(f"✅ Tarefa {i+1} concluída")
except Exception as e:
error_msg = str(e)
if "cameo_permission_denied" in error_msg:
print(f"⚠️ Erro de permissão, tentando geração sem personagem")
# Geração de fallback
try:
response = client.videos.generate(
model="sora-2-1080p",
prompt=prompt,
timeout=120
)
results.append({
"index": i,
"success": True,
"fallback": True,
"data": response
})
print(f"✅ Tarefa {i+1} (fallback) concluída")
except:
results.append({
"index": i,
"success": False,
"reason": "fallback_failed"
})
else:
results.append({
"index": i,
"success": False,
"reason": "api_error",
"error": error_msg
})
time.sleep(2) # Evita requisições muito rápidas
return results
# Exemplo de uso
prompts = [
"A character running in the forest",
"A character sitting by the fireplace",
"A character flying in the sky"
]
characters = ["vee.papi", "25d56f016.meridian", "another.user"]
results = batch_generate_with_characters(prompts, characters)
# Estatísticas dos resultados
success_count = sum(1 for r in results if r["success"])
print(f"\nTotal de tarefas: {len(results)}, Sucessos: {success_count}, Falhas: {len(results) - success_count}")

Sugestão de solução: Para aplicações empresariais, recomendamos o uso da plataforma APIYI (apiyi.com) para chamar a API do Sora. Ela oferece recursos de nível corporativo, como tentativas inteligentes (retry), cache de validação de personagem e otimização de chamadas em lote, aumentando significativamente a taxa de sucesso e a estabilidade das tarefas de geração massiva.
O Impacto das Configurações de Permissão de Personagem nas Chamadas de API
Detalhes das Configurações de Permissão
Ao criar um personagem no Sora, você pode escolher os seguintes níveis de permissão:
| Nível de Permissão | Cenários de Uso | Impacto nas Chamadas de API |
|---|---|---|
| Only me | Uso pessoal, quando você não quer que outros usem sua imagem | Todas as chamadas de API falham, exceto as do criador |
| People I approve | Projetos colaborativos, permitindo apenas membros específicos da equipe | O criador precisa aprovar manualmente cada usuário |
| Mutuals | Cenários sociais, permitindo apenas usuários que se seguem mutuamente | Requer uma relação de seguimento bidirecional |
| Everyone | Personagem público, destinado a um uso amplo | Teoricamente, todos os usuários podem fazer chamadas |
Permissões Podem Ser Revogadas a Qualquer Momento
Risco crucial: Mesmo que um personagem seja configurado inicialmente como "Everyone", o criador pode mudar para "Only me" ou excluir o personagem a qualquer momento. Isso significa que:
- Um personagem que funciona hoje pode ficar indisponível amanhã
- Tarefas em lote podem falhar no meio do caminho devido a mudanças de permissão
- Depender a longo prazo de personagens públicos traz riscos
Estratégias de Mitigação:
- Validação Periódica: Verifique diariamente ou semanalmente se os personagens dos quais você depende ainda estão disponíveis.
- Estratégia de Cache: Armazene os resultados da validação em cache por 1 a 6 horas para evitar requisições frequentes.
- Plano de Contingência (Fallback): Tenha sempre um comando (Prompt) de fallback que não dependa de personagens específicos.
- Backup de Múltiplos Personagens: Para cenários críticos, prepare 2 ou 3 personagens semelhantes como reserva.
Perguntas Frequentes
Q1: Por que minha chamada de API retorna permission_denied, mas a página do Profile abre normalmente?
Isso acontece porque a Visibilidade do Perfil e a Permissão de Uso do Personagem são duas configurações independentes:
- Visibilidade do Perfil: Controla quem pode ver a página de perfil do personagem e o histórico de vídeos.
- Permissão de Uso do Personagem: Controla quem pode referenciar esse personagem na geração de vídeos.
Mesmo que o Perfil esteja configurado como público (visível para todos), a permissão de uso do personagem ainda pode estar como "Only me". Nesse caso:
- ✅ Você consegue acessar
https://sora.chatgpt.com/profile/{handle}e ver as informações do personagem. - ❌ Sua chamada de API retornará o erro
cameo_permission_denied.
Solução: Entre em contato com o criador do personagem e peça para ele alterar a permissão de uso para "Everyone" ou adicionar sua conta à lista "People I approve".
Q2: Como diferenciar se um personagem foi excluído ou se a permissão é insuficiente?
Você pode diferenciar através do conteúdo retornado pela URL do Perfil:
Cenário 1: Personagem excluído
- A URL do Perfil retorna o código de status 200.
- A página exibe:
Failed to load profile. Please try again. - Chamada de API:
cameo_permission_denied.
Cenário 2: Permissão configurada como privada
- A URL do Perfil pode retornar 200 (mostrando informações limitadas) ou 403 (sem permissão de acesso).
- A página exibe: Informações parciais ou "Private profile".
- Chamada de API:
cameo_permission_denied.
Método de julgamento rápido:
result = check_character_availability("handle")
if result["status"] == "deleted":
print("❌ 角色已被删除,API 调用必定失败")
elif result["status"] == "restricted":
print("⚠️ 角色存在但可能因权限设置失败")
elif result["status"] == "available":
print("✅ 角色存在,但 API 调用仍取决于角色使用权限")
Sugestão: Em ambientes de produção, personagens que falham consecutivas vezes devem ser removidos da lista de chamadas para evitar o desperdício de cota da API.
Q3: Como referenciar o Handle e o Character ID do personagem na chamada de API?
A API do Sora suporta duas formas de referência:
Método 1: Usando @ + Handle (Recomendado)
response = client.videos.generate(
model="sora-2-1080p",
prompt="A character dancing @vee.papi"
)
Método 2: Usando Character ID (Não recomendado)
response = client.videos.generate(
model="sora-2-1080p",
prompt="A character dancing @25d56f016.meridian"
)
Principais Diferenças:
- Handle: Amigável para o usuário e fácil de lembrar, mas o criador pode alterá-lo (após a alteração, o Handle antigo torna-se inválido).
- Character ID: Identificador interno do sistema, permanente e imutável, mas difícil de lembrar e identificar.
Melhores Práticas: Em ambientes de produção, recomenda-se armazenar tanto o Handle quanto o Character ID. Use o Handle como prioridade e, caso ele falhe, utilize o Character ID como fallback.
Nota: Independentemente do método utilizado, as configurações de permissão do personagem devem ser respeitadas. Se você não tiver permissão de acesso, ambos os métodos retornarão o erro cameo_permission_denied.
Resumo
Pontos principais sobre o erro cameo_permission_denied no Sora 2:
- Sistema de permissões complexo: 4 níveis de permissão (Apenas eu / Pessoas que eu aprovar / Amigos mútuos / Todos) determinam quem pode usar o personagem via API.
- A URL do Perfil é a chave: Através de
sora.chatgpt.com/profile/{handle}você pode verificar se o personagem existe; se retornar "Falha ao carregar o perfil", o personagem foi deletado. - Permissões dinâmicas: O criador do personagem pode alterar as permissões ou excluir o personagem a qualquer momento, fazendo com que um personagem anteriormente funcional pare de funcionar de repente.
- A API não possui interface de pré-verificação: A API do Sora não oferece uma interface para consultar permissões; é necessário verificar via URL do Perfil ou disparar o erro em uma chamada real.
- Tolerância a falhas obrigatória em produção: Implemente cache de validação de personagens, estratégias de fallback e tolerância a falhas em tarefas em lote para evitar que a falha de um único personagem interrompa todo o processo.
Como uma funcionalidade que depende de Conteúdo Gerado pelo Usuário (UGC), a disponibilidade dos personagens do Sora possui incertezas. Recomendamos usar o APIYI (apiyi.com) para testar rapidamente sua lógica de chamada de personagens. A plataforma oferece créditos gratuitos e ferramentas detalhadas de diagnóstico de erros, suportando o Sora 2 e diversos outros modelos de geração de vídeo para ajudar você a construir um ambiente de produção estável.
📚 Referências
⚠️ Observação sobre o formato dos links: Todos os links externos utilizam o formato
Nome da fonte: domain.com, facilitando a cópia, mas sem links clicáveis para preservar a integridade do SEO.
-
Documentação Oficial do OpenAI Sora: Guia de geração de personagens (Cameo)
- Link:
help.openai.com/en/articles/12435986-generating-content-with-cameos - Descrição: Introdução oficial sobre o processo de criação, configurações de permissão e restrições de uso da funcionalidade Cameo.
- Link:
-
Tutorial Completo Sora 2 Cameo: Criação de personagens e solução de problemas
- Link:
www.aifreeapi.com/en/posts/sora-2-cameo-yourself-tutorial - Descrição: O guia mais recente de 2026 sobre a funcionalidade Cameo, incluindo técnicas de gravação e configurações de permissão.
- Link:
-
Sora Character Creation Guide: Práticas para manter a consistência do personagem
- Link:
help.apiyi.com/sora-character-creation-complete-guide-en.html - Descrição: Análise profunda das melhores práticas para criação de personagens no Sora e chamadas via API.
- Link:
-
Cameo Likeness in Sora 2: Permissões, privacidade e perguntas frequentes
- Link:
sider.ai/blog/ai-tools/cameo-likeness-in-sora-2-a-friendly-guide-to-prompts-permissions-and-pitfalls - Descrição: Explicação detalhada sobre o sistema de permissões e os mecanismos de proteção de privacidade do Cameo.
- Link:
Autor: Equipe Técnica
Troca de Conhecimento: Sinta-se à vontade para discutir suas experiências com chamadas de personagens do Sora na seção de comentários. Para mais materiais de solução de problemas de API, visite a comunidade técnica do APIYI em apiyi.com.
